2011-10-26 79 views
0

更新iPhone應用程序使用越來越多的內存

解決了這個問題,並有一個週期的挽留。

原始的問題

資料顯示零內存泄漏,但該應用程序使用越來越多的內存隨着時間的推移。

讓我們只需要在應用程序中的一個東西,並有一個詳細的外觀。有一個表格視圖 - 我們稱之爲主表格,當點擊任何一個單元格時,它會引導您進入第二個表格視圖,第二個表格中包含10至20個圖片。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    FlyerListTable *detail = [[FlyerListTable alloc] initWithNibName:@"FlyerListTable" bundle:nil]; 
    detail.department = [categories objectAtIndex: indexPath.row]; 
    detail.promotions = [items valueForKey:detail.department]; 
    [self.navigationController pushViewController:detail animated:NO]; 
    [detail release]; 
} 

FlyerListTable是第二個表中的類,並且它定義的dealloc,但是我追查這個dealloc方法從未被調用。

回答

1

什麼是約定或最佳實踐?

我建議你讓它延遲加載:

- (FlyerListTable*)flyerListTable 
{ 
    if (_flyerListTable == nil) 
     _flyerListTable = [[FlyerListTable alloc] initWithNibName:@"FlyerListTable" bundle:nil]; 
    return _flyerListTable; 
} 

不要忘了釋放它的dealloc中。

當行選擇

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    FlyerListTable* detail = [self flyerListTable]; 
    detail.department = [categories objectAtIndex: indexPath.row]; 
    detail.promotions = [items valueForKey:detail.department]; 
    [self.navigationController pushViewController:detail animated:NO]; 
} 

當我跟蹤它然後使用它,這dealloc方法從未被調用。

如果您的示例中未調用dealloc,則表示其他對象已保留它。嘗試找出什麼對象可以保留它,然後再進行任何更改。您可以爲此覆蓋保留方法:

- (id)retain 
{ 
    return [super retain]; 
} 

設置斷點以查看調用堆棧。當然,你不應該使用ARC。

祝你好運!

+1

http://stackoverflow.com/questions/4636146/when-to-use-retaincount – vikingosegundo

+0

@PeterPeiGuo你說的對,導航控制器應該在彈出後釋放它。 – Davyd

+0

@vikingosegundo我不鼓勵任何人使用retainCount :) – Davyd

相關問題