当我们在IOS的XCode4中开发一些应用程序时,我们偶然发现了一个奇怪的问题:
在NSThread中,我们定期更新无限循环中的GUI元素(图像)。为了更新它,我们在循环中创建了一个后台线程,并且每0.1秒处理一次更新操作。 另一方面,当我们查看配置文件视图时,少量内存(常量10kb)在10秒内泄漏。
然后我们只是切换到performSelectorOnMainThread来进行NSThread中无限循环内的组件更新操作,泄漏就消失了。
我想知道这是否是一个必须避免的设计错误,以及是否存在与垃圾收集器相关的任何其他基本缺陷。
提前致谢。
答案 0 :(得分:1)
这肯定与任何类型的GC无关。 iOS上的Objective-C没有垃圾回收。
此外,是的,这是一个巨大的设计错误。一个后台线程,其中有一个无限循环,其中经常调用主线程,呵呵......
最好将更新粘贴到运行循环中,仅从主线程调用UIKit,如果真的需要定期调用该方法,请使用GCD(尽管可能你实际上并不需要它和也应该重新设计,但没有一些上下文就很难分辨。)
另外,不要忘记为您发送的每个线程创建一个自动释放池,因为默认情况下,它们不会自动处理(即使在ARC下也是如此)。