【发布时间】:2016-09-23 18:12:49
【问题描述】:
说来话长,请耐心等待......
我有一个视图控制器,当它在应用程序会话的整个生命周期中出现超过 3 次时,它将挂起、锁定和冻结我的整个应用程序。甚至 Springboard 也会锁定,直到我的应用程序完全后台运行!在 Xcode 的检查器中,我非常震惊地注意到,每次我呈现该视图时,内存占用量都会增加 5-8 MB,并且在关闭后它不会再次下降。到第四次调用时,应用程序已经使用了 40 MB 的内存。
我的第一个想法是,“天啊,这是一个记忆韭菜!”第二个想法告诉我跳进 Instruments 并追踪它。
虽然 Leaks 工具确实帮助了一些人,但它只告诉我该应用程序正在疯狂地泄漏。它只会告诉我,在这四秒的时间间隔内,我获得了“4 次新泄漏”和“17 次新泄漏”之间的信息。不过,它们确实与我打开该视图相对应,一旦我开始评论随机的东西(并遵循分配工具有时有用的指导),我将它们中的大部分追踪到三行额外的代码。 “哦,好吧,反正我也不需要那些观点!”这三行不再存在,Instruments 也不再抱怨。
我在这里唯一的抱怨是我的用户界面仍然表现相同!在第四次演示中,整个应用程序变慢了。在进一步检查 Xcode 的工具后,我发现不仅内存仍在增加(这次只增加到 30 MB,而不是 40 MB),而且 CPU 活动已经下降!
好吧,当然我一开始就应该去那里看看,但我并不完美!
我再次运行该应用程序,发现我呈现的视图控制器越多,整体 CPU 活动就会持续上升。到第三个,它达到了 40-60%。主线程看起来很清晰,大部分活动都分布在其他八个后台线程之间(谁知道所有这些线程在做什么)。
我第四次打开那个视图时,我以为一切都会像疯了一样被阻挡。它没有。 CPU 刚刚……停止了。它以大约 50% 的速度运行,当我的手指离开屏幕时,它已下降到 1%。所有的线图都从尖刺的石笋缩小到水坑中的微小波浪。根据饼图,绝大多数处理器都可以随心所欲。它不喜欢我。
我真的不知道为什么会这样。我已经被困在一个房间里好几天了,试图弄清楚这一点。任何帮助或建议将不胜感激。
有谁知道为什么会发生这种情况,这是如何发生的,或者我可以做些什么来避免这种情况发生?我在这里画一个空白......
非常感谢!
需要注意的是,我是通过在 iPhone 5s 上运行该应用程序获得的。是的,我确实在模拟器上进行了尝试,但我的小 MacBook Air 把它当成了冠军,除了告诉我问题发生在 iPhone 上之外,并没有帮助解决这个问题。
【问题讨论】:
标签: ios iphone swift memory-leaks cpu