在ARC下,让每个IBOutlet成为一个属性有什么意义?对于仅在视图控制器内部使用的IBOutlets使用ivars有什么缺点?在ARC下使用IBOutlets属性的有用性?
回答
如果您不使用setter/getter方法进行任何操作,请不要依赖这些属性的键值观察,也不要预期子类会从覆盖这些属性中受益,那么就没有真正的在ARC下使用IBOutlets的ivars的缺点。
谢谢,ivars会在我的代码中消除很多'self.'前缀。 –
请查看我的答案,并让我知道你是否对任何事情有所了解。 –
我一直在为我的“私人”IBOutlets使用ivars,并遇到内存泄漏问题。我认为这是因为我的IBOutlets使用__unsafe_unretained
属性而不是__weak
。我不能使用__weak
,因为它不支持iOS 4(我希望我的应用程序与iOS 4向后兼容)。很难掌握ARC,IBOutlets,viewDidUnload以及所有这些混乱情况的真实情况。唉...
总之,当我将IBOutlets从ivars更改为属性时,内存泄漏问题就消失了。
因此,要回答我自己的问题,使用IBOutlets的ivars的一个缺点是,如果您拥有__unsafe_unretained
属性,则可能会遇到内存泄漏。
这不可能是你的泄漏源头。如果你的网点是'__unsafe_unretained',那么根据定义,这些ivars没有保留它们的目标,*不保留*某件东西永远不会导致泄漏。 (它可能导致崩溃,但这是另一回事。)你没有指定你添加的属性是否同样是'unsafe_unretained',但无论哪种方式,通过添加属性你可以做的唯一的事情就是*更多*保留。没有更多的细节,不可能说出你为什么泄漏。如果你真的好奇,你可以提交另一个问题。 –
我添加的属性确实是'unsafe_unretained'。我真的很困惑,为什么将IBOutlets从ivars更改为属性会产生变化。也许我没有正确解释XCode的仪器。 –
unsafe_unretained可能会导致崩溃,但不会导致泄漏。我会说你正在解释器械错误。抱歉。 :)但那就是说,现在已经有好几个月了:你对所发生的事情有更多的了解吗? –
- 1. ARC属性的新属性
- 2. 使用ARC在init内设置属性?
- 3. 是否需要使用ARC的UIView属性的retain属性?
- 4. 使用ARC的Objective-C属性
- 5. 载入具有零IBOutlets属性
- 6. 使用ARC时重新分配属性
- 7. 保留CTFrameRef属性使用ARC
- 8. 使用ARC是否NSMutableArray需要属性?
- 9. ARC宣布的属性属性 - 了解
- 10. ARC和nill属性
- 11. 迭代UIViewController的属性和IBOutlets
- 12. Objective-c属性没有在ARC下发布
- 13. 更新与ARC属性启用
- 14. 为什么使用ivars代替IBOutlets属性?
- 15. Wikitude - “弱”属性的@synthesize只允许在ARC或GC模式下使用
- 16. 我应该使用属性和块/ ARC的弱引用吗?
- 17. ARC和弱IBOutlet属性
- 18. Swift如何在属性属性中实现ARC?
- 19. 在@synthesis属性中使用属性= ivar
- 20. 如何保持IBOutlet属性不被释放(使用ARC的iOS)
- 21. 在ARC下的头文件中声明IBOutlets的正确方法?
- 22. 在不调用getter的情况下读取属性属性?
- 23. 使用属性
- 24. 使用属性
- 25. 使用属性
- 26. 使用ul下拉的必需属性
- 27. 使用属性和性能
- 28. 在ARC下是否有属性设置器形式的官方文档?
- 29. Objective-C的ARC属性重复混乱
- 30. ARC下的-viewDidUnload中的弱和强属性
你为什么认为必须创建属性? – Phlibbo
@Phlibbo:我一直在这里和那里看到,这是“良好的做法”,并简化了viewDidUnload代码。 –
我希望有一本类似于Scott Meyers和Herb Sutter为C++编写的书的“有效的iOS”书。 –