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

标签 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 发布];以下警告:

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

此外(我已经测试过了)我收到了这条消息

[ self 释放]

问题。

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

你怎么看?

感谢您的帮助。

最佳答案

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

你可以简单地做:

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

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

[speakerFetchResults release];

关于ios - 使用 self.property 释放属性 - 分析器中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7293151/

相关文章:

ios - 如何查看一个字符串是否与另一个字符串中的任何字符匹配?

ios - Swift 4 - 使用 Codable 协议(protocol)解析 JSON(嵌套数据)

javascript - 无法获取uiwebview中选中的单词

xcode4 - 是否可以在 xcode4 中自定义不可见的字符?

.NET WPF XAML "BindingExpression path error: ... property not found"

ios - 忽略 UITableViewCell 内的垂直滚动

ios4 - Iphone 语音气泡

objective-c - 如何在获取的属性中指定多对多属性?

java - 在 Java 中查找 ArrayList 中满足条件列表的所有对象

c# - 为什么我的属性(property)不做检查?