2011-12-18 38 views
0

我想我有内存泄漏,我已经启用僵尸,并在剖析器中突出显示了这部分代码,我已经标记了百分比。Obj-C,僵尸内存泄漏,我看不到它?

这对我来说很好。

任何想法?

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

    NSMutableArray *tmpArray = [[NSMutableArray alloc]init]; 

    if (metadata.isDirectory) { 
     for (DBMetadata *file in [metadata.contents reverseObjectEnumerator]) { 
      [tmpArray addObject:file.filename]; -- 44% 
     } 
    } 

    self.itemArray = tmpArray; 
    [tmpArray release]; 

    [self.dropboxTableView reloadSections:[NSIndexSet indexSetWithIndex:0] 
      withRowAnimation:UITableViewRowAnimationFade]; -- 55.6% 

    [activityIndicator stopAnimating]; 

编辑

在接口方面: -

NSMutableArray *itemArray; 
+3

僵尸不是用来检测泄漏的;它们用于告诉你是否尝试访问已分配的对象。 http://www.cocoadev.com/index.pl?NSZombieEnabled – occulus 2011-12-18 15:57:34

+0

您使用哪种分析器?内存或CPU?这些分配百分比,还是泄漏百分比? – 2011-12-18 15:59:50

+0

当你说'分析器'时,你的意思是内存泄漏工具吗? 读取工具的输出并不总是很直接,因为它经常会显示你分配内存的位置,而不是代码中导致泄漏的位置。 因此,mem泄漏工具的屏幕截图可能非常方便。但通常,我会查看上面%代码中指定的代码。例如,你的tmpArray被设置为self.itemArray - 所以在别处泄漏self.itemArray的东西? – occulus 2011-12-18 16:01:43

回答

1

我觉得线程产生泄漏,在这里,如果你不使用NSAutoreleasePool?

-(void)threadStartAnimating 
{ 
     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
     //your code. 
     [pool release]; 
} 

谢谢。