调用者不在此时拥有的对象的引用计数的不正确的减少

时间:2012-03-12 08:38:18

标签: objective-c ios memory-management nsarray

大家好我通过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];
}

任何人都可以告诉我为什么它会给我警告。谢谢提前。

1 个答案:

答案 0 :(得分:0)

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

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