2
A
回答
6
主要原因是对不可变对象的copy
操作实际上是retain
的别名(或者对于垃圾收集,它是无操作)。这是有效的,因为在正确使用不可变对象的情况下,除了通过指针比较之外,您无法观察到原始文件和副本之间的差异。
这很重要,因为“值对象”(如字符串)经常被复制,以避免Kenny Wyland描述的情况。如果你有一个属性被声明为@property (copy) NSString *foo
,给它分配一个不可变的字符串将会保留它而没有明显的开销,同时给它分配一个可变字符串将会复制它,以避免它在被授权者后面改变。
-1
根据我的经验,这不是技术上更好地为内存管理的目的IF你知道如何正确地管理内存。我的猜测是,他正在为新可可开发人员推荐它,因为它本质上将帮助他们避免处理内存的一些陷阱。
例如,如果您的类A有一个成员NSString * myString ...那么如果您创建一个NSMutableString * mutable并设置A.myString = mutable ....类A的作者将期望myString不会改变,但由于它实际上是可变,那么它可以。所以他可能会提出这样的建议,以便新开发人员避免在脚下自己拍摄。
这只是一个猜测,但我不知道为什么不可变的内存更有记忆效率。
相关问题
- 1. 不可变对象的内存管理
- 2. Cocoa中的抽象类内存管理
- 3. Cocoa中的本地对象作用域和内存管理
- 4. 可可内存管理NSArray与对象
- 5. 未管理对象的内存管理
- 6. Android内存管理与Linux内存管理有什么区别?
- 7. 单例对象内存管理
- 8. 为什么不可变的对象抛出UnboundLocalError但可变的对象不?
- 9. 为什么手动内存管理?
- 10. 为什么Python中有不可变对象?
- 11. 为什么这个简单的div改变对象的值?
- 12. 为什么String对象在java中是不可变的?
- 13. 为什么我的简单Cocoa绑定不起作用?
- 14. 没有所有者的Cocoa类的内存管理
- 15. 所有对象在堆内不可变?
- 16. 为什么这是一个对象的合法发布? (iOS内存管理)
- 17. 内存中的对象和一般的内存管理
- 18. 如何管理对象的内存
- 19. 复制对象时的内存管理
- 20. Qt对象的Qt内存管理
- 21. 互操作对象的内存管理
- 22. 什么可以在Silverlight中“钉住”内存中的对象?
- 23. 为什么没有为这些ATL简单对象生成ProgId?
- 24. 管理Javascript内存中变量的最佳方式是什么
- 25. 简单的PHP递归 - 为什么我的内存不足?
- 26. 了解Python名称对象,不可变数据和内存管理
- 27. 在不同的Cocoa视图和菜单中是否存在用于管理对象状态的标准模式?
- 28. flash as3为什么在改变对象的alpha值时会有内存增益?
- 29. Objective-C/Cocoa:什么是Interface Builder/Nib中的“Application”代理对象?
- 30. 为什么我的不可变对象突变Scala