cocoa ;这段代码中存在什么泄漏?

标签 cocoa

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];

具有内存泄漏的仪器表示存在多个 NSCFString 泄漏,我已经尝试解决这个问题有一段时间了,非常感谢任何帮助。

谢谢

编辑:上面的代码集运行了几次,并且我有一堆涉及 NSCFString - NSPlaceholderString 的泄漏。我几乎立即释放 tempDataHolder,其余变量也被释放。我无法确定泄漏的位置。

最佳答案

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

[tempData addObject:[tempDataHolder copy]];

容器保留其元素,但复制的对象在插入数组之前其保留计数已为 1。因此,复制的对象会泄漏。

只需在数组(而不是副本)中添加 tempDataHolder 即可解决该问题。

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

关于 cocoa ;这段代码中存在什么泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4425699/

相关文章:

macos - 按 ID 对核心数据排序

objective-c - cocoa 左栏菜单

cocoa - 核心文本具有不同高度的多列

objective-c - HelperApp 无法从 PrefPane 读取用户默认值

cocoa - 允许 childWindow 中的 View 成为关键,而不会失去对 ParentWindow 的焦点

cocoa - UINavigationController 内的 UITabBar 使用 Storyboard

swift - 在 macOS Mojave 上,在 cocoa 应用程序中,如何使用 AVSpeechSynthesizer?

objective-c - Objective C 中的天数列表

cocoa - 获取字符串绑定(bind)的 cocoa

objective-c - keyDown 未被调用