我目前正在更新我的应用程序,过去几天我一直面临一个非常奇怪和复杂的问题。有问题的应用程序部分由一个UITableViewController组成,它是一个新闻列表,并且(在您点击新闻之后)一个详细视图,实际上是一个UICollectionView,其中包含与新闻一样多的详细信息CollectionViewCells。
每个元素都可以包含无限量的元素,当用户滚动到TableView的底部(或者位于CollectionView右侧最远位置的单元格)时,它们会被20加20。此外,在DetailsCollectionViewCell中,可以有另一个包含图像的UICollectionView。
我的问题是在滚动一些细节视图后,在正常行为后(即当我更改页面时分配内存,然后稳定直到我再次更改页面,依此类推),内存分配开始慢慢增加但稳定地,即使我根本不做任何事情。此外,CPU使用率将达到100-120%并保持在那里,无论我做什么,即使是,如果我不接触任何东西,也是如此。过了一会儿,UICollectionView和UITableView将不再渲染任何动画,因此在滚动时失去了分页和惯性,整体上导致了非常糟糕的用户体验。
奇怪的是,我可以通过XCode 5的Debug Navigator观察这些行为,但是当我尝试使用instrument来查找泄漏/分配的来源时,分配图是正常的,我得到40-60 MB内存尽管仍在观察动画/寻呼问题,但不再使用。
有没有人遇到过这种奇怪的行为,有人可以帮助我找到所有这些大惊小怪的原因吗? (也许是通过固定仪器?)
提前谢谢大家,如果需要,请不要犹豫,向我询问更多信息!
答案 0 :(得分:1)
在此期间我找到了解决问题的方法。
关于Xcode 5的Debug Navigator和Instruments之间的内存使用差异,它是由我使用NSZombies引起的。我一直习惯于把它们放在上面,而这只是我的想法...要删除它们:产品>方案>编辑方案>诊断>启用Zombie Objects(只需取消标记)。
我的CPU使用原因是一个动画在多个页面的后台无限期地进行。解决方案是首先不再看到/有用它就停止它,通过改变我的方法来优化它(我使用CAAnimation并继续使用UIView的动画功能)。
我想我可能已经把这个触发器拉得太快了,但是嘿......如果以后可以帮助别人,那么这不会是浪费!