【问题标题】:incorrect decrement of the reference count of an object that is not owned at this point by caller调用者此时不拥有的对象的引用计数的错误减少
【发布时间】:2012-03-12 08:38:17
【问题描述】:

大家好,我正在通过 IDE 中的分析器工具运行我的代码,我在 dealloc 中得到一个指示,并说“调用者此时不拥有的对象的引用计数不正确递减”我是创建一个 NSArray 并正确发布我的代码示例如下

myClass.h

{                                                         
NSArray *arrayOfChapters;

}
@property (nonatomic, retain) NSArray *arrayOfChapters; 

@end

myClass.m:

-(void)parseAndLoadChaptersAndPages{
self.arrayOfChapters = chapterLoader.arrayOfChapters;
}
-(void)dealloc{
    [self.arrayOfChapters release];
    [super dealloc];
}

谁能告诉我为什么它给我警告的问题。提前谢谢。

【问题讨论】:

  • 您没有在dealloc 中调用[super dealloc]。也可以试试[arrayOfChapters release] 而不是[self.arrayOfChapters release]
  • 既然你使用属性,你应该让setter释放对象。改为 self.arrayOfChapters = nil。

标签: objective-c ios memory-management nsarray


【解决方案1】:

您可以直接释放 ivar ([arrayOfChapters release]),也可以将属性设置为 nil (self.arrayOfChapters = nil),setter 方法将为您释放 ivar。

对象拥有 ivar arrayOfChapters,但不一定是您使用属性语法调用的 arrayOfChapters 方法的返回值。这有点令人困惑,因为 ivar 和方法的名称完全相同。在这种情况下,arrayOfChapters 方法返回 ivar,所以这不是问题。但是分析器认为该方法理论上可以返回不同的对象,在这种情况下,您将过度释放该对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多