2011-12-18 54 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]; 
} 

謝謝。