【问题标题】:Not understanding 'Possible leak of an object' error不理解“对象可能泄漏”错误
【发布时间】:2011-09-10 10:17:02
【问题描述】:
346 - NSFileManager *fileManager = [[NSFileManager alloc] init];
347 - [fileManager removeItemAtPath:[mediaSource.newMediaToDelete objectAtIndex:i] error:nil];
348 - [fileManager release];

错误指向第 348 行并说:

'在第 347 行分配的对象的潜在泄漏'

这个我没看懂,明明347行不是分配,346行的分配已经释放了。

【问题讨论】:

  • 我认为NSFileManager没有问题。我认为问题出在newMediaToDelete 的getter 中,它可能返回一个未自动释放的对象。你能发布一些getter或相应属性的代码
  • 如果您没有更改 getter 名称,编译器/分析器会认为 -newMediaToDelete 返回一个拥有的对象,因为它的名称以“new”开头。

标签: iphone objective-c xcode memory-leaks


【解决方案1】:

避免在您自己的方法名称中使用“new”或“create”(除非它们返回的对象我猜不是自动释放的)。它混淆了静态分析器。我遇到过这个问题,当我更改方法名称后发现它消失了。

更新:我看到 Bavarious 已经在 cmets 中注意到了这一点。

【讨论】:

    【解决方案2】:

    可能在 NSArray 中的 mediaSource.newMediaToDelete 对象没有自动释放?

    【讨论】:

      【解决方案3】:

      我尝试了以下代码,但没有收到任何警告:

        NSInteger i = 0;
          NSArray *ax = [NSArray arrayWithObjects:@"a",@"b",@"c",nil];
          NSFileManager *fileManager = [[NSFileManager alloc] init];
          [fileManager removeItemAtPath:[ax objectAtIndex:i] error:nil];
          [fileManager release];
      

      所以它必须与返回的 mediaSource.newMediaToDelete 对象...

      尝试一个 var 赋值,例如:

      x = [mediaSource.newMediaToDelete objectAtIndex:i];
      

      它应该在那里显示...

      【讨论】:

        【解决方案4】:

        您是否尝试单击错误消息本身?那些向您显示问题路径的箭头有时非常有用。我猜是导致消息的 mediaSource 或 newmediaToDelete 对象。

        【讨论】:

          猜你喜欢
          • 2012-01-10
          • 1970-01-01
          • 2016-01-25
          • 1970-01-01
          • 2014-12-10
          • 1970-01-01
          • 2015-10-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多