iPhone NSAutoreleasePool错误

时间:2012-12-24 11:44:42

标签: iphone objective-c

iPhone应用程序开发的新功能。
我正在使用Objective-C ++和CPP为iPhone模拟器开发一个示例应用程序。

我收到以下错误,我不明白为什么我会收到这些错误。

2002-1-4 11:11:11.649 myApp[912:592f] *** _NSAutoreleaseNoPool(): Object 0x1b0d2d0 of class NSCFString autoreleased with no pool in place - just leaking
Stack: (0x305a2e6f 0x30504682 0x7c93 0x7b92 0x30d8 0x6ee2 0x1ae95e 0x6013 0x3496 0x43ca 0x39923b 0x3ca0a0 0x3ca121 0x3a1e 0x926d8155 0x926d8012)
2002-1-4 11:11:11.650 myApp[912:592f] *** _NSAutoreleaseNoPool(): Object 0x4f02470 of class __NSArrayReverseEnumerator autoreleased with no pool in place - just leaking
Stack: (0x305a2e6f 0x30504682 0x7c93 0x7b92 0x30d8 0x6ee2 0x1ae95e 0x6013 0x3496 0x43ca 0x39923b 0x3ca0a0 0x3ca121 0x3a1e 0x926d8155 0x926d8012)

我的应用程序中的内存泄漏导致了这些错误,我得到了这些错误的数量。 我有一个函数更新表视图,当那个函数被调用时,我得到这些错误,在该函数中,我将元素添加到一个std :: vector然后调用[mTableViewList reloadData];更新表视图。

OSX版本:10.5.8和Xcode版本:3.1.3

1 个答案:

答案 0 :(得分:1)

错误意味着尚未安装池。每当你要调用cocoa时,你需要在每个线程上执行此操作

当你使用GCD使用调度块时,你很好,os会创建线程和池,但是每当你自己创建一个线程时你需要设置一个NSAutoreleasePool

在ARC下使用@autoreleasepool,之前使用[[NSAutoreleasePool alloc] init];