2010-04-18 13 views
0

我创建第二个线程调用,使用下载几个图像的方法:iphone - 在单独的线程的内存泄漏

[NSThread detachNewThreadSelector:@selector(downloadImages) toTarget:self withObject:nil]; 

它工作正常,但我得到的泄漏一长串在日志中类似:

2010-04-18 00:48:12.287 FS伴侣[11074:650F] *** _NSAutoreleaseNoPool():对象0xbec2640类NSCFString自动释放与地方没有游泳池 - 刚刚泄露 堆栈:(0xa58af 0xdb452 0x5e973 0x5e770 0x11d029 0x517fa 0x51708 0x85f2 0x3047d 0x30004 0x99481fbd 0x99481e42)

2010-04-18 00:48:12.288 FS Companion [11074:650f] *** _NSAutoreleaseNoPool():类NSCFString的对象0xbe01510自动释放,没有池到位 - 正在泄漏 堆栈:(0xa58af 0xdb452 0x5e7a6 0x11d029 0x517fa 0x51708 0x85f2 0x3047d 0x30004 0x99481fbd 0x99481e42)

2010-04-18 00:48:12.289 FS伴侣[11074:650F] *** _NSAutoreleaseNoPool():对象0xbde6720类NSCFString自动释放与地方没有游泳池 - 刚刚泄露 堆栈:(0xa58af 0xdb452 0x5ea73 0x5e7c2 0x11d029 0x517fa 0x51708 0x85f2 0x3047d 0x30004 0x99481fbd 0x99481e42)

有人可以帮我理解这个问题吗?

回答

3

错误是“_NSAutoreleaseNoPool()”。没有在线程中默认分配的NSAutoreleasePool。你需要自己创建一个,否则-autorelease的对象将被泄漏。

-downloadImages因此应该是这样的:

-(void)downloadImages { 
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; 
    ... 
    [pool drain]; 
} 
+0

非常感谢你 – Brodie 2010-04-18 07:14:31

1

我只是在一个类似的问题......滑稽的嵌套线程泄漏的地狱。

不要忘记释放池。 :-)

-(void)downloadImages { 
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; 
    ... 
    [pool release]; 
    pool =nil; 
} 
+0

Ehhhmm ... drain已经释放了池。我不知道。 – MacTouch 2010-05-08 16:26:48