用NSThread观察泄漏

时间:2013-04-17 11:56:03

标签: garbage-collection objective-c++

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

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

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

我想知道这是否是一个必须避免的设计错误,以及是否存在与垃圾收集器相关的任何其他基本缺陷。

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

此外,是的,这是一个巨大的设计错误。一个后台线程,其中有一个无限循环,其中经常调用主线程,呵呵......

最好将更新粘贴到运行循环中,仅从主线程调用UIKit,如果真的需要定期调用该方法,请使用GCD(尽管可能你实际上并不需要它和也应该重新设计,但没有一些上下文就很难分辨。)

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