使用self.property释放属性 - 分析器中的错误

时间:2011-09-03 12:36:00

标签: ios xcode4 properties analysis

我有一个带有属性

的UIViewController
@property (nonatomic, retain) NSMutableArray *speakerFetchResults;

然后我使用

在viewWillAppear中设置属性
 self.speakerFetchResults = [[[self.speakerViewContext executeFetchRequest:request error:&error] mutableCopy] autorelease];

并希望在UIViewController的dealloc方法中再次使用

释放它
[self.speakerFetchResults release];

但是,如果我分析我的文件,我会[self.speakerFetchResults release];以下警告:

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

此外(我已经试过了)我在所有

上收到了这条消息

[self.anything release]

的问题。

所以我有点困惑并删除所有“自我”。在此版本中或通常会导致程序中的许多错误。所以我认为分析仪是错的,但我只是想请你帮忙。

您怎么看?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您不应该call release on the object returned by the getter(获取者可能有副作用,自定义逻辑,返回自动释放的对象等等,因此您不能认为[self.speakerFetchResults release][speakerFetchResults release]具有相同的结果)。

您可以这样做:

self.speakerFetchResults = nil; // this releases the old value

或者,在dealloc中,不鼓励使用访问者:

[speakerFetchResults release];