36、不用使用retainCount
OC通过引用计数类管理内存。每个人对象都有一个计数器,其值表明还有多少个其他对象想令此对象继续存活。对象创建好之后,其保留计数大于0。保留与释放操作分别会使计数递增or递减。当技术变为0时,对象就被系统回收了。
retainCount无用的原因:
它所返回的保留计数只是某个给定时间点上的值。该方法并未考虑到系统会稍后把自动释放池清空,因而不会将后续的释放操作从返回值里减去,因此此值未必能真实反映实际的保留计数。
retainCount可能永远不返回0,因为有时系统会优化对象的释放行为,在保留计数还是1的时候就把它回收了。只有在系统不打算这么优化时,计数值才会递减至0。
如果发现某个对象的内存泄露了,应该检查还有谁仍然保留这个数,并查明为何没有释放此对象。
要点:
对象的保留计数看似有用,实则不然,因为任何给定时间点上的“绝对保留计数”(absolute retain count)都无法反映对象声明期的全貌
引入ARC之后,
retainCount方法就正式废止了,在ARC下调用该方法会导致编译器报错
Last updated
Was this helpful?