自动释放没有池警告?

时间:2012-02-28 17:11:16

标签: objective-c

我有音频类来对缓冲区进行采样,并使用NSNotification调用另一个类并发送数据(int)。

我得到的警告每秒运行很多次:

class __NSCFNumber autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool()

class __NSCFString autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug

这意味着什么? 是的,我在该课程中NSNumber NSString。 他们没有被分配。

我需要另一个帖子吗? 怎么了?

2 个答案:

答案 0 :(得分:1)

您是否在应用程序的main()函数中使用自动释放池?你是否在主线程以外的线程中使用自动释放的实例(是的,我知道,你没有alloc-init它们,但[NSNumber numberWith ...]返回一个alloc-init-autoreleased对象)?如果您最初没有设置自动释放池,或者您正在使用多个线程,则必须为每个线程创建一个单独的NSAutoreleasePool。

答案 1 :(得分:1)

这意味着,对于运行代码的任何线程,在代码运行之前没有设置autorelease pool。对于基于AppKit或UIKit的应用程序,框架通常在主线程上为您管理一个,但如果您正在使用其他线程,您仍需要自己创建它们。对于不基于AppKit或UIKit的应用程序,您几乎总是需要确保在运行Objective-C代码时有自动释放池。