当前位置:  开发笔记 > IOS > 正文

Objective-C内存问题(iPhone)

如何解决《Objective-C内存问题(iPhone)》经验,为你挑选了2个好方法。

我在为iPhone模拟器(或设备)编译的Xcode项目中看到的以下行为让我感到困惑:

NSString *test = [[NSString alloc] initWithCString:"foo"];

NSLog(@"test retain count = %d", [test retainCount]); // prints 1

[test release];

NSLog(@"test retain count = %d", [test retainCount]); // also prints 1 instead of 0

但是,任何进一步尝试访问'test'都会导致Xcode环境崩溃,无论是另一个[test retainCount]NSLog语句还是其他方式(即使只检查测试是否等于nil).

思考?在一个简单的基于视图的测试项目中编译...代码存在于项目的applicationDidFinishLaunching方法中.

澄清 - 我知道不要在实践中做上述事情.这只是一个测试,看看为什么在某些调试情况下,保留计数为1实际上并不反映对象的实际状态.谢谢你的回复.这只是一个测试存根,看看为什么我在一些情况下看到某些行为.我真正想要做的是追踪每当我销毁/重新创建自定义视图时始终创建的非常小的内存泄漏(0.06MB).



1> Andrew Grant..:

保留计数是一种调试辅助工具,根据Cocoa在幕后可能做的事情可能会产生误导.对于字符串文字尤其如此,其中数据永久可用且永远不会被真正删除.

集中精力确保您的代码遵循关于对象所有权的Cocoa内存管理规则.必要时,使用Instruments检查实际的内存泄漏.



2> codelogic..:

要调用retainCounttest 后,它已被释放,并可能释放,所以肯定结果是不可靠的,别说你不应该发送dealloced对象的任何消息.

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有