【发布时间】:2011-12-13 01:08:09
【问题描述】:
我最近加入了一个 iPad 项目。在查看代码库时,我遇到了一些不寻常的事情,其中之一是(我已经对其进行了元编码):
while (something.isAlwaysTrue) {
// Wait for something to happen. i.e. Get data from an internet connection.
// Respond to something.
}
在我开始对应用程序进行内存分析并发现这些循环大量内存泄漏之前,我没有注意到这有任何问题。原因是因为它们永远不会结束,所以在其中创建的任何 autorelease 实例永远不会被释放,因为该方法永远不会结束并且自动释放池永远不会有机会释放。
在与编写代码的开发人员讨论后,我想出了以下技术:
-(void) queueTask {
// Using GCD or perform with delay, call the process method.
}
-(void) process {
// Wait and/or do stuff.
[self queueTask];
}
基本思想是通过使用一种方法通过 GCD 或 runloop 进行排队,它使自动释放池有机会执行和清理autorelease 实例。这似乎工作得很好。
我的问题是 - 这是处理这些循环的最佳方法吗?或者有更好的方法吗?
【问题讨论】:
标签: objective-c ios memory-leaks