Objective-C编程与跨平台文件处理全解析
1. Objective-C的垃圾回收机制
在Objective-C编程中,除了语法,最令人头疼的就是手动内存管理。即使是经验丰富的程序员,也容易遇到程序崩溃和内存泄漏的问题,而且内存问题往往很难调试,会耗费大量的开发时间。
其他语言通过自动内存管理(通常称为垃圾回收)解决了这个问题。然而,垃圾回收往往与性能不佳划等号,因为它通常需要暂停常规操作来进行回收,这会让用户感到沮丧。尽管垃圾回收的支持者希望计算机性能最终能提升到足以忽略这个问题,但目前还未实现。
Leopard引入了一种有效的垃圾回收机制。Objective-C 2.0的垃圾回收器建立在自垃圾回收发明近50年来的集体智慧之上,并且充分考虑了Objective-C程序员的编程模式和习惯,具有以下特点:
- 避免进行诸如堆压缩或对象移动等昂贵的内存优化操作。
- 专注于生命周期较短的新对象,而非长期存在的旧对象。
- 不停止所有操作进行回收,而是等待合适的时机,仅在主线程上进行回收,并响应用户事件。
- 保持Objective-C的双重特性,不破坏与其他框架或内联C代码的兼容性。
- 必要时,让程序员能够控制垃圾回收的优化,甚至完全不使用它。
在Xcode中,垃圾回收是一个项目选项。当开启垃圾回收时,编译器会忽略 retain
、 release
和 autorelease
操作,但 NSAutoreleasePool
实例方法 drain
除外,它可以给回