您的位置:首页 > 其它

七十九、基础框架(三十七)内存管理-垃圾收集机制

2012-10-30 09:52 344 查看
到目前 为止,我们 创建的应用程序 都是 运行在内存管理环境中的。上一篇博文所总结的内存管理规则 就适用于 这种环境。在内存管理环境中 我们 需要处理 自动释放池、增加 或者 减少 物件的引用次数、物件 归谁 所有这些问题。

在Objective-c 2.0当中 有 一种内存管理的代替方案 可以使用,叫做 垃圾收集机制。有了 垃圾收集机制,你 就不用担心 增加、减少 物件的引用次数,自动释放池等等。系统 在程序执行的过程中 会自动追踪 哪些物件 属于 哪些物件 并且 在某些物件 不再需要的时候 将 他们占用的内存空间 清理掉。

如果 事情 真的 这么简单,那么 为什么 我们 不 从头到尾 都利用 垃圾收集机制 并且 跳过 所有关于内存管理的讨论呢?有 三个理由 使 我们 不这么做:

第一个理由:就算 运行环境 支持 垃圾收集机制,我们 最好还是 要知道 哪些物件 归谁所有,什么时候 不再需要 哪些物件了。这样 在你 编写 代码时 会使 你 对 物件之间的关系 以及 他们的生存周期 引起 高度的重视。

第二个理由:iPhone的运行环境 并不支持 垃圾收集机制,于是 如果 你 为iPhone平台 开发 应用程序,那么 你 就别无 选择了。

第三个理由:如果 你编写的 是 库、插件 或者 共享代码,那么 这些代码 既可能 载入 有垃圾收集机制的进程;也可能 载入 没有垃圾收集机制的进程。这些代码 必须 在两种环境当中 都能工作。这 就意味着 你 必须使用 我们之前讨论过的内存管理技巧。这 同样 意味着 你 必须 在启用垃圾收集机制 和 不启用垃圾收集机制的情况下 测试 你的代码。

如果 你 决定 使用 垃圾收集机制,那么 在编译 程序的时候,你 必须将 其 开启。首先 点击 Sample这个项目:



接着 点击 Build Settings



再找到 Apple LLVM compiler 3.0-Language这个大类:



再在这个大类中 找到 Objective-C Garbage Collection选项:



接着 点击 Unsupported,就会出现 弹出式菜单:



最后 选择 弹出式菜单中的最后一个选项。

当垃圾收集机制 启动后,你 同样 可以 在程序当中 采取 retain,autorelease,release 和 dealloc这些措施。但是 这些措施 都会被忽略掉。用这种方式开发出来的应用程序 既可以 在内存管理环境中 运行 也可以 在垃圾收集环境中 运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: