2012-08-28 139 views
0

我被困在试图分析为什么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

+0

'[self newDirectory]'返回什么? – ohr

+0

我添加了用于初始化NSOperation的方法,该方法也定义了'newDirectory' –

+1

如果它是一个属性,那么@danielbeard说的是正确的。 – ohr

回答

7

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

有很大的答案解释请见:Semantic Issue: Property's synthesized getter follows Cocoa naming convention for returning 'owned' objects

一个建议是要么改变吸气的名称上的财产,像这样:

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

或者调用它是这样的:directoryToBeCreated

+0

谢谢!只要我将我的财产重新命名为其他东西,问题就解决了。我不知道那个特定的命名约定,所以这真的很有帮助! –