objective-c - cocoa 代码中的内存泄漏

标签 objective-c xcode cocoa

我一直在尝试分析为什么 Xcode 分析器 (v4.2) 提示我的 Objective-C 代码泄漏内存。我正在创建一个 NSOperation,它 1) 递归地创建一个目录(如果不存在),2) 将文件从一个目录复制到另一个目录中。

NSOperation 初始化为:

- (id)initWithFullPathSource:(NSString *) mysource andFullPathCopy:(NSString *) mycopy     andNewDirectory:(NSString *) mydir withMode:(NSString *) mymode withLR:(NSString *) LR
{

     self = [super init];
     if (self) {

        [self setFullPathSource:mysource];
        [self setFullPathCopy:mycopy];
        [self setNewDirectory:mydir];
        [self setMode:mymode];
        [self setMyLR:LR];
    }

    return self;
}

附件是 Xcode 分析器如何查看我的代码的屏幕截图。谁能帮我理解为什么我在这种情况下会泄漏内存?我在主例程结束时释放了“createComponents”和“removeComponents”,所以我认为我已经清楚了。

希望有人能解答我的问题。谢谢!干杯,特隆德

enter image description here

最佳答案

请注意,根据 Objective C 命名规则,以单词 newcopy 开头的方法被假定返回调用者拥有的对象。如果对 [self newDirectory] 的调用返回一个自动释放的对象,请尝试重命名它,使其不以 new 开头。

这里有一个很好的答案解释更多:Semantic Issue: Property's synthesized getter follows Cocoa naming convention for returning 'owned' objects

建议更改属性上 getter 的名称,如下所示:

@property (strong, nonatomic, getter=theNewDirectory) NSString *newDirectory;

或者将其命名为:directoryToBeCreated

关于objective-c - cocoa 代码中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12169097/

相关文章:

objective-c - 适用于 iOS 和 Mac OS X 的 MacBinary 转换器

iphone - 为什么保留/释放而不是新建/删除?

iOS:无法在分页 UIScrollView 中的 UITableView 之间滚动

objective-c - xcode objective-c 在 NSObject 上缺少 @end

c++ - openCV 2.4.8 iOS 7.0 框架链接器错误

macos - 显示 NSWindow 下面的内容的最佳方式是什么?

iOS:EXC_BAD_ACCESS 错误 NSString 长度和 setHTTPBody

ios - 在 Xcode 8.2.1 中找不到“Cordova/CDV.h”文件

ios - 如何通过调试跳转controller

xcode - Mac OS 开发者 - 用于监控内存的工具