0

当我们在 XCode4 中为 IOS 开发一些应用程序时,我们偶然发现了一个奇怪的问题:

在 NSThread 中,我们在无限循环中定期更新 GUI 元素(图像)。为了更新它,我们在循环中创建了一个后台线程,每 0.1 秒处理一次更新操作。另一方面,当我们查看 Profile View 时,有少量内存(恒定 10kb)在 10 秒内泄漏。

然后我们只是切换到 performSelectorOnMainThread 进行 NSThread 中无限循环内的组件更新操作,泄漏就消失了。

我想知道这是否是一个必须避免的设计错误,是否还有其他与垃圾收集器相关的基本陷阱。

提前致谢。

4

1 回答 1

1

这肯定与任何类型的 GC 无关。iOS 上的 Objective-C 没有垃圾收集。

另外,是的,这是一个巨大的设计错误。一个后台线程,里面有一个无限循环,里面经常调用主线程,呵呵……

最好将更新坚持到运行循环,仅从主线程调用 UIKit,如果您确实需要定期调用该方法,请使用 GCD(尽管您可能实际上并不需要它,这也应该重新设计,但很难在没有上下文的情况下告诉。)

另外不要忘记为您调度的每个线程创建一个自动释放池,因为默认情况下,它们不会自动处理(即使在 ARC 下也不会)。

于 2013-04-17T12:06:07.217 回答