我这样做:
NSString *fullpath = [[NSBundle mainBundle] pathForResource:@"text_file" ofType:@"txt"];
为什么会出现以下消息? 我的代码泄漏了吗?
2010-03-31 13:44:18.649 MJIPhone[2175:207] *** _NSAutoreleaseNoPool(): Object 0x3909ba0 of class NSPathStore2 autoreleased with no pool in place - just leaking
Stack: (0x1656bf 0xc80d0 0xcf2ad 0xcee0e 0xd3327 0x2482 0x2426)
2010-03-31 13:44:18.653 MJIPhone[2175:207] *** _NSAutoreleaseNoPool(): Object 0x390b0b0 of class NSPathStore2 autoreleased with no pool in place - just leaking
Stack: (0x1656bf 0xc80d0 0xc7159 0xd0c6f 0xd3421 0x2482 0x2426)
2010-03-31 13:44:18.672 MJIPhone[2175:207] *** _NSAutoreleaseNoPool(): Object 0x390d140 of class NSCFString autoreleased with no pool in place - just leaking
Stack: (0x1656bf 0xc6e62 0xcec1b 0xd4386 0x24ac 0x2426)
答案 0 :(得分:2)
这是因为您在线程中运行。用户线程不共享主线程自动释放池,因此您需要创建自己的线程。否则,像这样的对象永远不会被释放,从而泄漏。
在你的线程方法的开头,循环之前或其他什么,做:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
在返回之前,请将其释放:
[pool drain];
答案 1 :(得分:1)
当您运行该行代码时,当前线程上没有创建NSAutoreleasePool
。
如果您在主线程上运行,Cocoa(和Cocoa Touch)会自动为您提供自动释放池。如果你已经在一个单独的线程上安排了某些事情(也包括由performSelectorInBackground:withObject:
安排的事情),那么你需要提供自己的自动释放池。