21

正如您在这里所读到的,在大多数情况下 aIBOutlet应该是弱的。

现在您可以在开发库中阅读,并非所有类都支持弱引用。(例如 NSTextView)。这意味着您必须使用分配:

@property (assign) IBOutlet NSTextView *textView;

如果您使用弱引用,您将收到以下错误:“不允许合成弱不可用属性,因为它需要合成 __weak 对象的 ivar”

文档没有提到的是,现在您必须在使用该属性后再次将其设置为 nil,例如通过一种dealloc方法:

- (void)dealloc
{
    self.textView = nil;
} 

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

4

1 回答 1

13

我想我找到了某些类不支持弱引用的原因:

你可以在这里阅读:

基本原理:从历史上看,一个类可以通过覆盖保留、释放等来提供自己的引用计数实现。但是,对对象的弱引用需要与其类的引用计数实现协调,因为除其他外,弱引用对于最终版本,加载和存储必须是原子的。因此,现有的自定义引用计数实现通常不支持弱引用而不需要额外的努力。在不破坏二进制兼容性的情况下,这是不可避免的。

于 2012-10-14T13:32:29.473 回答