不要担心`retainCount`?真?

Dan*_*ark 0 iphone memory-management objective-c

我被告知不要担心保留计数.我明白我不应该决定releaseretain使用基于条件逻辑retainCount,但我不应该担心吗?我认为这些以某种方式对应于内存使用.

例如,如果我有一堆子视图UIView,我也已经放入了NSArray能够迭代它们,那么这不会使保留计数加倍,从而使应用程序的内存使用量增加一倍吗?如果是这样,如果子视图是500个UIControl实例,这是否代价高昂或微不足道?当然,这假设我需要500个实例.

bbu*_*bum 7

返回的值retainCount是对象保留的绝对次数.A UIView来自一个实现不透明的框架.对于与您交互的文档化界面,您不应该担心实现细节.

在该实现中,UIView作为实现的一部分,实例可以被保留任意次.在记忆方面,实际的保留数量毫无意义; 1与5相同.

您应该关注的唯一事情是您的代码如何更改对象保留计数.

如果你的代码增加了保留计数,它必须在某处减少它,否则对象将永远存在.如果你retain,你必须release(或autorelease).如果你copy,你必须releaseautorelease.如果您newalloc,您必须release(或autorelease).

这就对了.


小智 6

您不应该担心,retainCount因为它通常是引用计数系统的误导性实现细节.您应该关注的是遵循适当的对象所有权政策.

我在Apple的文档中偶尔发布一次:

重要说明:此方法在调试内存管理问题时通常没有价值.因为任何数量的框架对象可能保留了一个对象以保存对它的引用,而同时自动释放池可能在对象上保留任意数量的延迟版本,所以您不太可能从此获取有用信息方法.

至于你的上一个问题,从一个数组添加对象到另一个数组,你的内存使用率不会翻倍.保留计数只是对象中的无符号整数,当某些东西声称拥有它时,它会递增1.但同样,不要关心自己.


Meh*_*ari 5

例如,如果我有一堆UIView的子视图,我也已经放入NSArray中以便能够遍历它们,那么不会使保留计数翻倍......

是的,它会的.

...因此应用程序的内存使用?

没有!结论是错误的.当存储为32位整数时,1000000占用的空间与0相同.