Foundation Release Notes for OS X v10.11 and iOS 9: NSNotificationCenter说:"如果一个对象被弱引用,则在重新分配期间将不再向观察者发送通知。"如何判断对象是否可以被弱引用"?
答案 0 :(得分:4)
Clang documentation中有一些相关信息:
明确允许Objective-C类不支持 __弱引用。使用指向Objective-C对象的指针执行具有弱赋值语义的操作是未定义的行为 其类不支持__weak引用。
原理
从历史上看,一个班级有可能提供自己的班级 覆盖保留,释放等的引用计数实现 但是,对对象的弱引用需要与其协调 class的引用计数实现,因为,除其他外, 弱负荷和储存必须是最终的原子 发布。因此,现有的自定义引用计数实现 如果没有额外的努力,通常不会支持弱引用。 在不破坏二进制兼容性的情况下,这是不可避免的。
类可能表示它不支持弱引用 提供objc_arc_weak_reference_unavailable属性 class的接口声明。可保留的对象指针类型是 weak-unavailable if指向(可选的协议限定)指针 Objective-C class T其中T或其中一个超类具有 objc_arc_weak_reference_unavailable属性。一个程序是不正确的 如果它将__weak所有权限定符应用于弱不可用 类型或弱赋值操作的值操作数是否为 弱不可用类型。
此外,假设它仍然是最新的,Transitioning to ARC说:
哪些类不支持弱引用?
您当前无法创建对实例的弱引用 以下课程:
NSATSTypesetter,NSColorSpace,NSFont,NSMenuView,NSParagraphStyle, NSSimpleHorizontalTypesetter和NSTextView。
答案 1 :(得分:2)
基本上,您了解的每个对象都可以被弱引用。文档中的前一句描述了规则的例外:"即。它有一个自定义的保留/释放机制,可以防止运行时能够弱地存储对象"。您可能不希望注册的对象符合该描述。