use*_*662 5 iphone garbage-collection objective-c
我正在考虑为iPhone编写应用程序.但我对Objective-c语言感到困惑.我说我必须做自己的记忆管理吗?Objective-C是一种托管语言,如C#和/或Java吗?
谢谢!
Ada*_*ght 11
"管理"是一个没有技术含义的营销术语.iPhone的目标C不是垃圾收集,而是使用保留计数内存管理.所以从某种意义上说,你必须做自己的内存管理,但它只限于知道Cocoa保留计数方法.
编辑:我对"托管"的评论是指之前的帖子版本.评论留在这里是因为我厌倦了看到这个词.
没有垃圾收集功能。但是,您 、 等的任何对象的copy
保留计数都会增加一,并且您负责调用 a或 an - 您拥有该对象的一个实例。如果不调用或,该对象仍保留在 iPhone/iPod Touch/iPad 的内存中,但指针不再保留,并且会发生内存泄漏,因为该位内存无法再访问。Autoreleasing 将对象添加到自动释放池中,这意味着它将在将来的某个时刻被释放。尽可能始终使用标准,因为这意味着它仍会在设备内存中保留一段时间,您永远无法确定它何时会被释放,并且调用方法的要求稍高。retain
alloc
release
autorelease
[<YOUROBJECT> release];
[<YOUROBJECT> autorelease];
release
autorelease
切勿调用dealloc
对象 - 释放或自动释放就足够了,如果需要,该对象将自动释放。
确保您永远不会释放不属于您的对象,如果您确实释放了对象,则在不再使用它们后释放它们 - 否则,您可能会尝试访问该对象,而设备无法找到该对象,并且这种情况会导致您的应用程序因EXEC_BAC_ACCESS
错误而崩溃 - 要找出问题的根源,请打开 Instruments,添加对象分配工具并在其首选项中启用 NSZombie 检测(或添加 Zombies 工具(仅在 iPhone SDK 3.2+ 中可用) ))。然后,您可以查看导致问题的对象的整个历史记录,并跳转到导致问题的确切代码行。
你可以在这里阅读更多。
希望这有帮助
归档时间: |
|
查看次数: |
6773 次 |
最近记录: |