2010-08-23 171 views
0

我使用的工具,以找到泄漏在我的iPhone應用程序和我發現我有在這條線的泄漏在我的代碼NsMutable陣列保留計數

tableViewController.dataSource = [[NSMutableArray裏的alloc] initWithArray:[subjects_dic allKeys]];

屬性dataSource定義爲retain。 這是一個錯誤?!

回答

4

打破它:

NSMutableArray *mutArray = [[NSMutableArray alloc] initWithArray:[subjects_dic allKeys]]; 
[tableViewController setDataSource:mutArray]; 
[mutArray release]; 

這是你用來創建,推搡,並釋放從導航控制器查看相同的模式。

2

如果您在屬性聲明中指定了保留,那麼您分配給該屬性的任何內容都將保留。

在你的榜樣

所以,你有兩個選擇:

  1. 而不是創造與分配/初始化方法一個新的數組,你可以簡單的設置後使用[NSMutableArray arrayWithArray:[subjects_dic allKeys]];

  2. 發佈的財產,一旦它。這個選項並不是一個好主意,因爲如果該屬性的內存管理在將來發生變化並且這個版本被遺忘了,它可能會導致崩潰。

我建議選擇1

1

另一種選擇:

// mutableCopy implicitly retains the array returned by allKeys 
NSMutableArray *mutArray = [[subjects_dic allKeys] mutableCopy]; 
[tableViewController setDataSource:mutArray]; // @property dataSource retains mutArray 
[mutArray release];