2016-12-28 99 views

回答

2

基本上,每一个对象了解可以被引用弱。文档中前面的句子描述了规则的例外情况:“它具有自定义保留/释放机制,可以防止运行时无法轻微存储对象。”没有可能需要注册的对象适合该描述。

+1

顺便说一句,谢谢你指出这个笔记。我没有意识到我们不再需要手动取消注册。 – matt

+0

当然可以!谢谢您的回答。 :-) – ma11hew28

4

有一个在Clang documentation一些这方面的信息:

这是明确允许的Objective-C类为不支持 __weak引用。使用指向Objective-C对象 的指针执行弱分配语义的操作是未定义的行为,其类不支持__weak引用。

理由

历史上,已经有可能为一类通过重写保持,释放等 然而,一个对象弱引用要求其 类的引用协调提供自己 引用计数实现-count执行,因为除了别的以外, 弱加载和存储相对于最终的 版本必须是原子。因此,现有的自定义引用计数实现 通常不会支持弱引用而无需额外的努力。 这是不可避免的,不会破坏二进制兼容性。

一个类可能表明它不支持 的弱引用,在 类的接口声明中提供了objc_arc_weak_reference_unavailable属性。可保留的对象指针类型为 如果是指向(可选择使用协议限定的) Objective-C类T的指针,则为弱不可用,其中T或其某个超类具有objc_arc_weak_reference_unavailable属性 。如果一个程序不合格 如果它将__weak所有权限定符应用于不可用的 类型或者如果弱分配操作的值操作数具有 弱不可用类型。

此外,假设它仍然电流,Transitioning to ARC说:

哪些类不支持弱引用?

您当前无法创建弱引用到 以下类的实例:

NSATSTypesetter,NSColorSpace,NSFont,NSMenuView,NSParagraphStyle, NSSimpleHorizo​​ntalTypesetter和NSTextView。

相关问题