Cocoa 热可可这段代码有什么漏洞?

Cocoa 热可可这段代码有什么漏洞?,cocoa,Cocoa,内存泄漏的仪器说有多个NSCFSTRING泄漏,我已经试着找出它有一段时间了,非常感谢任何帮助 谢谢 编辑:上面的代码集运行了几次,我有一大堆关于NSCFString-NSPlaceholderString的泄漏。我几乎立即发布了tempDataHolder,其余的变量也在发布中。我无法确定泄漏的位置。复制的对象需要所有者释放。也就是说,copy方法返回一个保留计数为1的新对象。在你的情况下,罪魁祸首似乎是这样的: NSMutableArray *tempData=[[NSMutableArra

内存泄漏的仪器说有多个NSCFSTRING泄漏,我已经试着找出它有一段时间了,非常感谢任何帮助

谢谢


编辑:上面的代码集运行了几次,我有一大堆关于NSCFString-NSPlaceholderString的泄漏。我几乎立即发布了tempDataHolder,其余的变量也在发布中。我无法确定泄漏的位置。

复制的对象需要所有者释放。也就是说,
copy
方法返回一个保留计数为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];
容器保留其元素,但复制的对象在插入数组之前已具有保留计数1。因此,复制的对象正在泄漏

只需在数组中添加
tempDataHolder
(不是副本)就可以解决这个问题


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

复制的对象需要由所有者释放。也就是说,
copy
方法返回一个保留计数为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];
容器保留其元素,但复制的对象在插入数组之前已具有保留计数1。因此,复制的对象正在泄漏

只需在数组中添加
tempDataHolder
(不是副本)就可以解决这个问题


另外,
tempDataHolder
是一个自动释放的对象,不应该显式释放。

谢谢Martin,让我试试这个!再次感谢马丁,他处理了一切:)-是我对[复制]的无知。。我学到了一些新东西。投票和打分作为回答:)谢谢马丁,让我试试这个!再次感谢马丁,他处理了一切:)-是我对[复制]的无知。。我学到了一些新东西。投票和评分作为回答:)