记忆管理困境,目标-C

Tea*_*App 1 iphone memory-leaks memory-management objective-c ios

我一直在测试Objective -C的不同功能,并达到了处理内存管理的主题.显然,在阅读少量文档时,内存管理似乎非常严格,以便构建功能良好的应用程序.

现在按照我的理解,当我们分配一个内存时,一个对象retainCount将变为1.然而,我为学习目的写的东西,它给了我异常retainCount

这对我来说可能是一个不正常的数字,但是那些在幕后知道的人,请你解释我是如何得到这个retainCount以及发布它的最佳方法.

具有异常retainCount的代码,

对象名称是: ...(UISlider *) greenSender...

-(IBAction) changeGreen:(UISlider *)greenSender{
    showHere.textColor = [UIColor colorWithRed:red.value green:greenSender.value blue:blue.value alpha:1.0];
    NSLog(@"retainCount %d",[greenSender retainCount]);
}
Run Code Online (Sandbox Code Playgroud)

reatainCount,只是执行我的代码之后.

在此输入图像描述

简短的解释会给我一个提示,外部阅读资源将受到赞赏.谢谢

Ada*_*eld 5

不要依赖保留计数.它们只应用作调试工具.原因是如果一个对象被retained和autoreleased,它的有效保留计数没有改变,但它的实际保留计数增加了一个.release当自动释放池耗尽时,它将在未来的某个时刻出现.因此,您无法依赖保留计数来了解对象是否已正确管理.

大的保留计数(例如8)可能表示编程错误(例如保留它太多次),但它也可能只是一个标志,它已被retain编辑并且autorelease次数很多,虽然好奇,但可能是完美的有效.

  • 你真的不想自己计算这些东西......它不会帮助你调试任何东西.最好通过确保符合内存管理约定来追踪错误.如果您需要一个帮助调试内存问题的工具,请查看NSZombies和Instruments. (3认同)

Jil*_*ouc 5

不要相信/依靠retainCount.真.

来自Apple:

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