我使用的工具,以找到泄漏在我的iPhone應用程序和我發現我有在這條線的泄漏在我的代碼NsMutable陣列保留計數
tableViewController.dataSource = [[NSMutableArray裏的alloc] initWithArray:[subjects_dic allKeys]];
屬性dataSource定義爲retain。 這是一個錯誤?!
我使用的工具,以找到泄漏在我的iPhone應用程序和我發現我有在這條線的泄漏在我的代碼NsMutable陣列保留計數
tableViewController.dataSource = [[NSMutableArray裏的alloc] initWithArray:[subjects_dic allKeys]];
屬性dataSource定義爲retain。 這是一個錯誤?!
打破它:
NSMutableArray *mutArray = [[NSMutableArray alloc] initWithArray:[subjects_dic allKeys]];
[tableViewController setDataSource:mutArray];
[mutArray release];
這是你用來創建,推搡,並釋放從導航控制器查看相同的模式。
如果您在屬性聲明中指定了保留,那麼您分配給該屬性的任何內容都將保留。
在你的榜樣所以,你有兩個選擇:
而不是創造與分配/初始化方法一個新的數組,你可以簡單的設置後使用[NSMutableArray arrayWithArray:[subjects_dic allKeys]];
發佈的財產,一旦它。這個選項並不是一個好主意,因爲如果該屬性的內存管理在將來發生變化並且這個版本被遺忘了,它可能會導致崩潰。
我建議選擇1
另一種選擇:
// mutableCopy implicitly retains the array returned by allKeys
NSMutableArray *mutArray = [[subjects_dic allKeys] mutableCopy];
[tableViewController setDataSource:mutArray]; // @property dataSource retains mutArray
[mutArray release];