Swift iOS 运行时内存使用增加

3
当我启动应用程序时,它将检查用户是否已登录。如果没有登录,则会将根视图控制器设置为登陆页面,用户可以在该页面注册或登录。如果已经登录,则会将根视图控制器设置为选项卡控制器的实例,其中包含三个视图控制器。
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观察是否存在内存泄漏,但它只显示绿色的勾号并指示没有内存泄漏。我已清理了我的构建文件夹,并从我的手机中删除了构建,但问题仍然存在。

enter image description here


1
似乎你的项目中有一些无限循环。如果这只在你登录时发生,那么我会在项目的“已登录”部分中搜索这些无限循环 - 从TabBarController通过每个包含在你的TabBar中的VC开始。 - Lukáš Mareda
@Virender 我无法看到我的视图控制器布局,它只显示一个空白的白屏。 - user12444445
@LukášMareda,看起来当我从选项卡栏中删除第一个视图控制器即HomeViewController时,一切都正常工作。白屏不再显示,我可以与应用程序交互,并且内存使用量不再增加。我应该寻找什么原因导致了这个无限循环? - user12444445
看起来'HomeViewController'里面可能出了问题。如果我知道具体情况,我可以帮你解决。 - Lukáš Mareda
请在此处发布您的HomeViewController代码。问题可能出现在那里。您在其中有任何for-loop吗? - Starsky
1个回答

3

配置内存分配

我制作了一个测试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
}

这应该能模拟您的问题。然后我们长按构建按钮并选择配置文件。

enter image description here

我们选择分配作为性能分析模板。

enter image description here

我们按下录制按钮。

enter image description here

我们再次选择分配。

enter image description here

我们选择调用树。

enter image description here

也许我们已经在右侧找到了有问题的堆栈跟踪。

enter image description here

或者您可以自己扫描调用树。

enter image description here

这应该为您提供了一个起点,以便进一步调试以找到无限循环 :)

1
我发现内存增加与初始化UITableViewCell时没有重用标识符直接相关。然而,我仍然不知道为什么会出现循环,但是通过您提供的详细过程,我能够找到解决我的特定问题的方法。 - user12444445

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接