Foundation Release Notes for OS X v10.11 and iOS 9: NSNotificationCenter说:“如果一个对象可以被弱引用,通知将不再在释放期间被发送给观察者。”我怎么能告诉“如果一个对象可以被弱引用”?我如何知道对象是否可以被弱引用?
回答
基本上,每一个对象你了解可以被引用弱。文档中前面的句子描述了规则的例外情况:“它具有自定义保留/释放机制,可以防止运行时无法轻微存储对象。”没有可能需要注册的对象适合该描述。
有一个在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, NSSimpleHorizontalTypesetter和NSTextView。
- 1. 如何知道对象是否已被引用?
- 2. Objective-C运行时如何知道弱引用的对象是否还活着?
- 3. JQuery UI:是否可以知道对象已被删除?
- 4. 在c#中如何知道一个弱引用的对象是否会被垃圾收集?
- 5. 我可以找出对象是否被引用吗?
- 6. 在Python中,如何知道对象是否可以比较?
- 7. 是否可以确定一个对象是否被另一个对象引用?
- 8. 我如何知道CUDA是否可以使用?
- 9. 如何知道我是否可以使用Windows命令“mklink”?
- 10. 我可以知道一个JavaScript文件是否已被执行?
- 11. 对象是否可以知道从哪个对象调用其方法?
- 12. 知道什么是对象引用
- 13. 对同一个对象的多个弱引用是否被清除?
- 14. 是否可以知道添加对象的数组(或数组)?
- 15. 如何知道对象被停止。对象被刚体强制
- 16. 我如何知道Sound对象是否正在播放?
- 17. 如何知道我的对象是否存在于C++中?
- 18. 如何知道json对象是否包含json对象
- 19. javax.persistence.Query对象是否可以被缓存?
- 20. 如何知道PHAsset是否被修改?
- 21. 如何知道url是否可用?
- 22. 如何知道fastcgi_finish_request()是否可用?
- 23. 可可如何知道文件是否被编辑/关闭
- 24. 如何查找是否可以删除引用的对象?
- 25. VS 2015调试:我如何知道2个对象变量是否具有相同的对象引用?
- 26. 函数可以知道它是如何被调用的吗?
- 27. 是否可以在同一个对象内引用对象?
- 28. 弱引用被清零,但对象未被释放
- 29. 确定弱引用的对象是否已释放
- 30. 如何知道对象是否为通用列表
顺便说一句,谢谢你指出这个笔记。我没有意识到我们不再需要手动取消注册。 – matt
当然可以!谢谢您的回答。 :-) – ma11hew28