【问题标题】:Memory leak in cocoa code可可代码中的内存泄漏
【发布时间】:2012-08-28 23:49:06
【问题描述】:

我一直试图分析为什么 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”,所以我认为我很清楚。

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

【问题讨论】:

  • [self newDirectory] 返回什么?
  • 我添加了用于初始化 NSOperation 的方法,该方法还定义了“newDirectory”
  • 如果是属性,那么@danielbeard 说的是正确的。

标签: objective-c xcode cocoa


【解决方案1】:

请注意,根据客观 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

【讨论】:

  • 谢谢!一旦我将我的财产重命名为其他东西,问题就解决了。我不知道那个特定的命名约定,所以这真的很有帮助!
猜你喜欢
  • 2012-09-12
  • 2013-04-18
  • 2018-11-26
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多