我一直拔出我的頭髮,試圖找出爲什麼這是泄漏。在我的.h文件中,我有一個非原子合成的屬性,保留了NSMutableArray。在我viewDidLoad中我把它聲明爲:泄漏NSMutableArray
self.tableData = [[NSMutableArray alloc] init];
[self.tableData removeAllObjects];
fillData(self.tableData);
在我的申請,我稱之爲[self.tableData removeAllObjects],然後用fillData(self.tableData)函數重新填充它。此功能填補了從靜態的C++字符串組數據:
void fillData(NSMutableArray* list)
{
for (set<string>::const_iterator itr = sortedData.begin(); itr != sortedData.end(); ++itr){
[list addObject:[NSString stringWithFormat:@"%s", ((string)*itr).c_str()]];
}
}
在我的dealloc方法我做的:
[self.tableData removeAllObjects], [self.tableData release], tableData = nil;
哪裏我誤事?儀器說它在[list addObject ....]行中。
感謝
不是你的'((字符串)* itr).c_str()'調用返回一個不是自動釋放的字符串? –
是的,但是被複制到應該自動釋放的NSString。所以我不確定這是如何造成泄漏的。我需要分配/自動釋放NSString嗎? – Alede
看起來很好。如果將該行分成兩部分,將其分隔爲「const char * s =(* itr).c_str(); [list addObject:[NSString stringWithUTF8String:s];'? – Yuji