2012-01-31 32 views
0

我開發一個應用程序。我正在執行一次搜索操作。 看到我的搜索方法:retaincount將複製後增加一個陣列

-(void)searchData 
{ 
//[A release]; 
B =[A copy]; 
[A release]; 

NSLog(@"A retain count %i",[A retainCount]); 
NSLog(@"B retain count %i",[B retainCount]); 
C = [[NSMutableArray alloc]init]; 
[C removeAllObjects]; 
for (int i=0; i<[B count]; i++) { 
    DataBaseFields *data = [B objectAtIndex:i]; 

    NSRange range= [data.DBtitle rangeOfString:searchEvents.text options:NSCaseInsensitiveSearch]; 
     if (range.length>0) { 
     [C addObject:data]; 

    } 

} 
NSLog(@"shouldChangeTextInRange text is %@",searchEvents.text); 
A = [C copy]; 

NSLog(@"A retain count %i",[A retainCount]); 
NSLog(@"C retain count %i",[C retainCount]); 
[tableView1 reloadData]; 
} 

在這段代碼ABC三個NSMutableArrays。我沒有分配內存,也沒有爲該數組寫入屬性。在此,如果搜索操作顯示任何數據,那麼陣列中的顯示retainCount最後1.如果再沒有結果數組A表示retainCount在最後32或46。所以,請告訴我如何解決這一個。

+3

閱讀本http://stackoverflow.com/questions/6534594/is-this-a-good-way-to-release-memory/6534665#6534665 – Jhaliya 2012-01-31 08:16:18

回答

4

retainCount是沒用的。別叫它。

除了是一般意義的,你看到的奇怪保留計數這個代碼,因爲,作爲一個實現細節,框架很可能呼籲保留的對象/自動釋放。由於保留計數並不反映對象被自動釋放的次數,因此保留計數在代碼中是無意義的。

還要注意的是,在這個​​是不必要的。

C = [[NSMutableArray alloc]init]; 
[C removeAllObjects]; 

更妙的是:既然你似乎是比較新的iOS開發,開啓ARC和與所有那些保留/釋放/自動釋放完全調用來完成。