那麼答案是簡單,從文檔:
返回值
含有筆尖文件中的頂層對象的數組。數組 不包含對文件所有者或任何代理對象的引用; 它僅包含那些在將nib 文件解除存檔時實例化的對象。您應該手動保留返回的數組或 包含的對象,以防止 的nib文件對象被提前釋放。
看起來你只是將返回值賦值爲arrayOfTableCellView
。如果你想保留返回值,並且arrayOfTableCellView
實際上是你的viewController的一個屬性,那麼你應該使用self.arrayOfTableCellView
來分配它。
如果您不保留它,您不必因爲不擁有它而將其釋放。所以,當你真正得到這樣
NSArray *arrayOfTableCellView = [[NSBundle mainBundle] loadNibNamed:@"TableCellXyz" owner:self options:nil];
數組,然後你不希望有
[arrayOfTableCellView release];
在那裏
,因爲你沒有分配的對象。
編輯:
只是爲了calarify這個給你,我只是跑你的代碼,與預期的結果:
NSArray * arrayOfTableCellView = [[NSBundle mainBundle] loadNibNamed:@"JLUViewController" owner:self options:nil];
UITableViewCell *cellOfXyz = (UITableViewCell*) [arrayOfTableCellView objectAtIndex:0];
[arrayCellHeights insertObject:[NSNumber numberWithInt:cellOfAlerts.frame.size.height] atIndex:kIndexXyz];
上面的代碼不會崩潰或導致泄漏。儀器不報告泄漏,所以你會沒事的。
如果添加
[arrayOfTableCellView release];
雖然它會崩潰,報告EXC_BAD_ACCESS,因爲你試圖釋放你沒有自己的對象。注意我是如何讓NSArray成爲局部變量的?你應該這樣做,因爲你不需要它是一個屬性,因爲你只是在函數的範圍內使用它。另請不要說,如果arrayCellHeights
是您的視圖控制器中的一個屬性,請始終使用self.arrayCellHeights
來訪問它。
就像一個說明:你不應該相信retainCount。你不知道幕後發生了什麼。你會得到什麼樣的錯誤?我揣測它是EXC_BAD_ACCESS? –
順便說一句 - 錯誤是跳出應用程序。在我的Instrumentation期間,我的經驗是,其中大部分都是內存保留/釋放不一致。在某些情況下,殭屍。 – mobibob