ARC 项目中 NSTextView 的 IBOutlet

21

正如你在这里所读到的,在大多数情况下,IBOutlet 应该是弱引用。

现在,正如你可以在开发文档库中了解到的那样,并不是所有的类都支持弱引用。 (例如:NSTextView)。这意味着你必须使用 assign:

@property (assign) IBOutlet NSTextView *textView;
如果您使用弱引用,将会收到以下错误: "Synthesis of a weak-unavailable property is disallowed because it requires synthesis of an ivar of the __weak object"
文档遗漏的是现在你必须在使用完之后重新将属性设置为nil,例如通过一个dealloc方法:
- (void)dealloc
{
    self.textView = nil;
} 

据我所了解,标记为NS_AUTOMATED_REFCOUNT_WEAK_UNAVAILABLE的类不支持弱引用,但是原因是什么?


根据链接帖子,IBOutlets默认应该是strong - Jay
1个回答

13

我认为我找到了一些类不支持弱引用的原因:

正如您可以在这里阅读的那样:

原因:历史上,一个类通过覆盖retain、release等方法可以提供自己的引用计数实现。然而,对于一个对象的弱引用需要与其类的引用计数实现进行协调,因为弱引用的加载和存储必须与最终释放同步。因此,现有的自定义引用计数实现通常不支持弱引用,除非额外付出努力。这是不可避免的,否则会破坏二进制兼容性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接