Dan*_*ark 0 iphone memory-management objective-c
我被告知不要担心保留计数.我明白我不应该决定release
或retain
使用基于条件逻辑retainCount
,但我不应该担心吗?我认为这些以某种方式对应于内存使用.
例如,如果我有一堆子视图UIView
,我也已经放入了NSArray
能够迭代它们,那么这不会使保留计数加倍,从而使应用程序的内存使用量增加一倍吗?如果是这样,如果子视图是500个UIControl
实例,这是否代价高昂或微不足道?当然,这假设我需要500个实例.
返回的值retainCount
是对象保留的绝对次数.A UIView
来自一个实现不透明的框架.对于与您交互的文档化界面,您不应该担心实现细节.
在该实现中,UIView
作为实现的一部分,实例可以被保留任意次.在记忆方面,实际的保留数量毫无意义; 1与5相同.
您应该关注的唯一事情是您的代码如何更改对象保留计数.
如果你的代码增加了保留计数,它必须在某处减少它,否则对象将永远存在.如果你retain
,你必须release
(或autorelease
).如果你copy
,你必须release
或autorelease
.如果您new
或alloc
,您必须release
(或autorelease
).
这就对了.
小智 6
您不应该担心,retainCount
因为它通常是引用计数系统的误导性实现细节.您应该关注的是遵循适当的对象所有权政策.
我在Apple的文档中偶尔发布一次:
重要说明:此方法在调试内存管理问题时通常没有价值.因为任何数量的框架对象可能保留了一个对象以保存对它的引用,而同时自动释放池可能在对象上保留任意数量的延迟版本,所以您不太可能从此获取有用信息方法.
至于你的上一个问题,从一个数组添加对象到另一个数组,你的内存使用率不会翻倍.保留计数只是对象中的无符号整数,当某些东西声称拥有它时,它会递增1.但同样,不要关心自己.
例如,如果我有一堆UIView的子视图,我也已经放入NSArray中以便能够遍历它们,那么不会使保留计数翻倍......
是的,它会的.
...因此应用程序的内存使用?
没有!结论是错误的.当存储为32位整数时,1000000占用的空间与0相同.
归档时间: |
|
查看次数: |
190 次 |
最近记录: |