2010-12-13 45 views
1
NSMutableArray *tempData=[[NSMutableArray alloc]init]; 
    TBXMLElement * city = [TBXML childElementNamed:@"city" parentElement:root]; 
    while(city!=nil){ 
     if([TBXML valueOfAttributeNamed:@"name" forElement:city]!=nil){ 
     NSString *tempDataHolder=[NSString stringWithFormat :@"%@,%@",[TBXML valueOfAttributeNamed:@"name" forElement:city],[TBXML valueOfAttributeNamed:@"country_name" forElement:city]]; 
     [tempData addObject:[tempDataHolder copy]];   
     [tempDataHolder release]; 
       } 
city = [TBXML nextSiblingNamed:@"city" searchFromElement:city];   

    } 
    tableData=[tempData copy]; 
    [tableCities reloadData]; 
    [tempData release]; 

带内存泄漏的仪器说有多个NSCFStrings泄漏,我一直试图弄清楚一段时间,任何帮助都非常感谢。可可;这段代码中的泄漏是什么?

感谢

编辑:以上组的代码运行了几次,我已经泄漏指NSCFString的一群 - NSPlaceholderString。我几乎立即释放tempDataHolder,其余的变量也被释放。我不能指出泄漏的位置。

回答

4

复制对象需要由所有者发布。也就是说,copy方法返回一个有保留1计数在您的情况一个新的对象,罪魁祸首似乎是这一行:

[tempData addObject:[tempDataHolder copy]]; 

容器中保留自己的元素,但复制的对象已经有一个保留在插入数组之前,计数为1。复制的对象因此泄漏。

只需在您的数组中添加tempDataHolder即可解决问题。

此外,tempDataHolder是一个自动释放的对象,不应该明确释放。

+0

谢谢马丁,让我试试这个! – Veeru 2010-12-13 04:09:41

+0

再次感谢马丁,这照顾了一切:) - 这是我对[复制]的无知。学到了新的东西。投票和标记为答案:) – Veeru 2010-12-13 04:49:44

+0

很高兴我能帮上忙。 – 2010-12-13 19:02:24