ios - Swift iOS 内存使用量在运行时增加
问题描述
当我启动应用程序时,它将检查用户当前是否已登录。如果没有,则将根视图控制器设置为他们可以注册或登录的登录页面。如果他们已登录,那么它将将根视图控制器设置为包含三个视图控制器的选项卡栏控制器的实例。
guard let windowScene = (scene as? UIWindowScene) else { return }
window = UIWindow(frame: UIScreen.main.bounds)
if let user = Auth.auth().currentUser {
window?.rootViewController = TabBarController()
window?.makeKeyAndVisible()
window?.windowScene = windowScene
print("\(user.email ?? "user") is already logged in")
} else {
let landingPageVC = LandingPageViewController()
window?.rootViewController = landingPageVC
window?.makeKeyAndVisible()
window?.windowScene = windowScene
}
由于某种原因,当我启动应用程序(在这种情况下我已登录)时,应用程序显示一个空白屏幕,我可以在调试导航器中看到应用程序似乎卡在分配内存的循环中。几分钟后,应用程序崩溃并在控制台中打印
来自调试器的消息:由于内存问题而终止
我使用 Instruments 来观察是否存在内存泄漏,但它只显示绿色刻度并表示没有内存泄漏。我已经清理了我的构建文件夹,并从我的手机中删除了构建,但问题仍然存在。
解决方案
配置文件内存分配
我制作了一个测试 iOS 应用程序来展示如何分析内存分配。创建一个新的 iOS 项目后,我将以下内容添加到AppDelegate
:
var test: [String] = []
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
while true {
test.append("blasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdfblasdgpjsogfisogfihsofighäkneäijifdf")
}
return true
}
这应该模拟您的问题。然后我们长按构建按钮并选择配置文件。
我们选择 Allocations 作为分析模板。
我们按下录制按钮。
我们再次选择分配。
我们选择调用树。
可能我们已经在右侧找到了有问题的堆栈跟踪。
或者你自己扫描调用树。
这应该为您提供进一步调试以找到无限循环的起点:)
推荐阅读
- javascript - HTML CSS JS - OnClick 仅在 1 个 div 上工作
- cypress - 赛普拉斯文件夹不可写
- batch-file - NSSM 未运行批处理 Node-RED
- c++ - 如何从文件中输出第一个和最后一个完美正方形之间的数字?
- xamarin.ios - Xamarin.iOS - 更新 Visual Studio 后突然出现错误:ibtool 以代码 72 退出
- php - 从一个表中查找并提取数据并将其插入到 php 和 mysql 中的另一个表中
- javascript - 网格在 Safari 中无法正常工作移动视图
- flutter - 在颤振抛出异常中使用测试横幅广告 id - “以下 adId 的广告已经存在:0”
- postgresql - 在 JSONB 列内的数组上附加慢速更新
- spss - 如何重新编码前两位数字SPSS