我在考虑为 iPhone 开发一个应用程序。但是我对 Objective-C 语言感到困惑。我是否正确地说,我必须自己进行内存管理?Objective-C 是否像 C# 和/或 Java 一样是一种托管语言呢?
谢谢!
谢谢!
copy
, retain
, alloc
等的对象都会增加其保留计数,你需要调用一个 release
或者一个 autorelease
来释放该对象 - 你拥有该对象的实例。如果你不调用 [<YOUROBJECT> release];
或者 [<YOUROBJECT> autorelease];
,那么该对象将留在 iPhone/iPod Touch/iPad 的内存中,但指针不再存在,这会导致内存泄漏,因为无法再访问该内存。自动释放将对象添加到自动释放池中,并意味着它将在未来某个时刻被释放。尽可能使用标准的 release
,因为 autorelease
意味着它仍然会在设备的内存中停留一段时间,你永远无法确定何时会被释放,而且这是一种稍微要求更高的方法。dealloc
- 释放或自动释放足够了,如果需要,对象将自动被释放。EXEC_BAC_ACCESS
错误 - 要查找问题的根本原因,请打开Instruments,添加Object Allocation工具并在其首选项中启用NSZombie检测(或添加Zombies工具(仅适用于iPhone SDK 3.2+))。然后,您可以查看导致问题的整个对象历史记录,并跳转到导致问题的确切代码行。正如其他人所指出的,iPhone上的Objective-C没有垃圾回收器,但Mac OSX有一个。这里有一篇文章更详细地描述了这个问题:http://vasudevkamath.blogspot.com/2010/01/objective-c-my-opinions.html
这个答案并不特定于Objective-C。如果你正在进行iPhone开发,那么...没有垃圾回收器。然而,如果你是在为Mac OSX开发,那么就有垃圾回收。