Objective-C 2.0最大的增强可能就是垃圾收集了(Garbage Collection)。与“垃圾收集”对应的是传统的引用计数(Reference Count)内存管理形式。

使用了垃圾收集意味着大部分情况下《Very simple rules for memory management in Cocoa>>所介绍的工作你在程序中都不需要做了,系统会自动帮你管理好这些问题。如果你没有阅读过《Very simple rules for memory management in Cocoa>>,请先阅读一下。否则你可能不知道“垃圾收集”说的到底是什么。

另外,iPhone的操作系统目前并不支持垃圾收集,如果你希望做iPhone开发或者希望你的程序在未来移植到iPhone,尽量不要在程序中使用垃圾收集。

什么是垃圾收集?

简单说来,垃圾收集可以被认为是“自动内存管理”的意思,就是说内存中不再使用的对象会被称做“垃圾”,垃圾收集的作用就是帮你自动释放掉这些“垃圾”以免程序占用过多不必要的内存。

传统的内存管理形式本站已经有所介绍了,所谓垃圾收集主要用于解决内存泄露问题。当你手工建立一个对象,而没有在不需要的时候释放它,那么它就保存在内存当中。如果创建了很多对象,那么就需要占用很多内存。少量的内存泄露不是很大的问题,但是当没有释放的内存过多时,就会出现很大的问题了,比如程序运行缓慢、占用内存过大等。 如果你程序在持续运行,这些对象如果没有在不需要的时候被释放,那么它们就会慢慢“吃光”你的内存。

垃圾收集对于不知道如何管理内存,但是具有很多好点子并且能够动手编写一定程序的人尤为有用。因为他们可以忽略掉麻烦的内存管理,而把大部分时间关注于如何实现一个可以跑起来的好点子。

如何使用垃圾收集?

在项目设置中打开垃圾收集选项即可。

说明

以下介绍关于Objective-C 2.0垃圾收集(简称GC)的几个关键点。

1 由于垃圾收集包含在Objective-C 2.0 runtime库里,所以如果你的程序使用了垃圾收集,那么只能跑在Leopard及以后版本上。

2 默认XCode是会关闭GC的,要打开的话需要修改项目的Build选项。

3 gcc打开垃圾收集的参数是:-fobjc-gc

4 Core Foundation对象也同样支持垃圾收集

5 打开垃圾收集后,retain、release和autorelease将不再工作。但是如果你的程序中包括这些内存管理方法,打开GC并不会影响你的程序。

6 如果你的Objective-C 程序和C、C++共存,那么你可以在用Objective-C的时候不考虑内存释放,但是在C或者C++时还是必须考虑内存释放的问题。

7 如果在打开垃圾收集的情况下明确需要释放某个对象,使用-finalize方法。

8 苹果建议最好不要同时支持垃圾收集和传统的引用计数,虽然编译器允许这样做。

垃圾收集的好处:

1 对懒人或者初学者来说,你可以不用再考虑对象是否释放和什么时候释放。这意味着你可以节省更多时间,同时减少出错和内存泄露的可能。

2 当时间推移,由于减少了很多工作量和学习门槛,可能会有更多Java或者其他开发人员转入Objective-C开发。

3 使用旧的引用计数内存管理方式的程序不会因为打开了GC而受到任何影响。

4 如果开发多线程程序,相比从前手工进行内存管理更加简单。

垃圾收集的坏处:

1 如果你想让程序兼容Tiger,那么你就没法使用垃圾收集,还是要用引用计数的形式编写程序。

2 可能的性能降低。如果你使用过Java,你可能会对垃圾收集对性能的影响有所了解。不过这仅仅是坏处之一,因为大部分情况下你是不会感觉到使用了GC的程序有什么速度变慢的问题。

3 如果你希望某个对象长期保存而不被释放,可能需要将其做为全局变量。

4 正如本文前面提到的,iPhone并不支持垃圾收集。如果你希望程序未来兼容iPhone,那么不要考虑使用垃圾收集。

关于Objective-C 2.0 的垃圾收集的更多相关文章

  1. iOS开发——技术精华Swift篇&Swift 2.0和Objective-C2.0混编之第三方框架的使用

    swift 语言是苹果公司在2014年的WWDC大会上发布的全新的编程语言.Swift语言继承了C语言以及Objective-C的特性,且克服了C语言的兼容性问题.Swift语言采用安全编程模式,且引 ...

  2. Objective - C中属性和点语法的使用

    一.属性        属性是Objective—C 2.0定义的语法,为实例变量提供了setter.getter方法的默认实现能在一定程度上简化程序代码,并且增强实例变量的访问安全性         ...

  3. Objective C Runtime 开发介绍

    简介 Objective c 语言尽可能的把决定从编译推迟到链接到运行时.只要可能,它就会动态的处理事情.这就意味着它不仅仅需要一个编译器,也需要一个运行时系统来执行变异好的代码.运行时系统就好像是O ...

  4. .Net Discovery 系列之七--深入理解.Net垃圾收集机制(拾贝篇)

    关于.Net垃圾收集器(Garbage Collection),Aicken已经在“.Net Discovery 系列”文章中有2篇的涉及,这一篇文章是对上2篇文章的补充,关于“.Net Discov ...

  5. .Net Discovery系列之三 深入理解.Net垃圾收集机制(上)

    前言: 组成.Net平台一个很重要的部分----垃圾收集器(Garbage Collection),今天我们就来讲讲它.想想看没有GC,.Net还能称之为一个平台吗?各种语言虽然都被编译成MSIL,但 ...

  6. .net垃圾收集机制【转】

    在.NET Framework中,内存中的资源(即所有二进制信息的集合)分为"托管资源"和"非托管资源".托管资源必须接受.NET Framework的CLR( ...

  7. .Net垃圾收集机制—了解算法与代龄

    垃圾收集器在本质上就是负责跟踪所有对象被引用到的地方,关注对象不再被引用的情况,回收相应的内存.在.NET平台中同样如此,有效的提高.NET垃圾回收性能,能够提高程序执行效率. 其实垃圾收集并不是伴随 ...

  8. 【摘录】JAVA内存管理-自动选择垃圾收集器算法

    在J2SE 5.0,垃圾收集的默认值:垃圾收集器.堆大小以及JVM的类型(客户端还是服务器)都会根据应用运行的硬件平台和操作系统自动选择.相比之前设置命令行参数的方式,自动选择很好的匹配了不同类型的应 ...

  9. iOS-UI-UI控件概述

    以下列举一些在开发中可能用得上的UI控件: IBAction和IBOutlet,UIView 1 @interface ViewController : UIViewController 2 3 @p ...

随机推荐

  1. Python-自省机制

     help 如果说能够通过一个函数就能够学会 Python,那这个函数一定就是 Python 提供的第一 个自带说明 help().help 函数的作用就是查看对象的帮组文档.比如: >> ...

  2. LeetCode——Palindromic Substrings

    Question Given a string, your task is to count how many palindromic substrings in this string. The s ...

  3. Javase、Javaee、Javame的区别

    /*简而言之,javase是基础,要先学,javaee是企业级,接着学,然后可以转到javaweb方向,javame是做移动应用的.基础必须先学,然后再考虑下一步*/ Java 平台有三个版本,这使软 ...

  4. 24,25-request对象

    var http = require('http'); var server = http.createServer(); server.listen() console.log(server.add ...

  5. Delphi.format填充0

    1. ]);// 一共8位数字不够的补零 2. 3. 4. 5.

  6. http://blog.csdn.net/milton2017/article/details/54406482

    转自:python 把几个DataFrame合并成一个DataFrame——merge,append,join,conca http://blog.csdn.net/zutsoft/article/d ...

  7. day33 Python与金融量化分析(三)

    第三部分 实现简单的量化框架 框架内容: 开始时间.结束时间.现金.持仓数据 获取历史数据 交易函数 计算并绘制收益曲线 回测主体框架 计算各项指标 用户待写代码:初始化.每日处理函数 第四部分 在线 ...

  8. Docker的大坑小洼(一)

    Docker的大坑小洼 Posted on March 2, 2015March 2, 2015 by 孙宏亮 Docker成为云计算领域的新宠儿已经是不争的事实,作为高速发展的开源项目,难免存在这样 ...

  9. js常用正则表达式,滚蛋吧!你们测试组bug,让你挑

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  10. eureka-4-eureka server 高可用

    Eureka Server 可以通过运行多个实例并相互注册实现高可用部署.Eureka Server 实例之间会彼此增量同步信息,确保所有节点信息一致. 关键点: 配置: eureka.client. ...