我试图分析为什么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',所以我觉得我很清楚。
希望有人可以解决我的问题。谢谢!干杯,特隆德
答案 0 :(得分:7)
请注意,在目标c命名规则下,假定以单词new
或copy
开头的方法返回调用者拥有的对象。如果对[self newDirectory]
的调用返回一个自动释放的对象,则尝试重命名它,使其不以新的开头。
这里有一个很好的答案解释:Semantic Issue: Property's synthesized getter follows Cocoa naming convention for returning 'owned' objects
建议更改属性上的getter名称,如下所示:
@property (strong, nonatomic, getter=theNewDirectory) NSString *newDirectory;
或者称之为:directoryToBeCreated