内存管理是开发软件中重要的一个课题。如果内存管理不当,轻者内存泄露,重者程序崩溃。

下面重要讲述一下iOS的ARC(Automatic Reference Counting))机制。

ARC的历史由来

在iOS1.0的时候,苹果公司没有开放手机开发接口,不存在iOS开发者这个概念。

在iOS2.0的时候,我们管理内存使用的技术数MRC机制。

在iOS5.0的时候,苹果公司推出了ARC机制。

我们知道在MRC管理内存的时候,我们需要遵守“谁创建,谁释放,谁引用,谁管理”这个黄金法则,我们在创建对象的时候,需要考虑在什么时候释放内存,有时候对内存管理机制不熟悉的话,就很有可能导致内存泄露和过度释放的问题。

手动管理内存会导致很多问题的产生,在iOS5.0的时候,苹果推出了自动内存管理ARC,当时使用的IDE是XCode4.0,在我们创建工程的时候,下面有一个选项,是否使用ARC,给开发者一个自主选择,但是推出ARC,去很少人去使用ARC,在XCode5.0的时候,已经不存在这个选项,我们创建工程默认选择的是ARC机制,我们我们想要使用MRC,需要手动配置工程。

在推出ARC的时候,很多人都说iOS的ARC和Android的GC机制很像,但是他们本身还是有很大的区别的。其中GCS是运行时特性,ARC是编译时特性。

ARC的使用

ARC我们字面翻译是自动引用计数,引申意我们可以理解为自动内存管理。自动内存管理难道我们真的不需要管理了吗?非也。ARC机制也会导致内存泄露的问题,我们在使用的时候,需要注意这些问题。

我们在MRC中,我们经常要使用release,autorelease,retain这些关键字,来保留引用计数或者释放对象。在ARC中,我们就不能这么处理了。如果我们使用这些关键字,我们的程序在基本的编译都不能通过。

既然我们创建的对象,不用我们手动释放,系统在必要的时候会为我们释放,那么对象会在什么时候释放掉呢?

探讨这个问题之前,我们先说明一下使用ARC的基本准则。

  • 强引用指向的对象不会被释放。
  • 一个对象没有强引用会立刻释放。
  • 弱引用指向的对象将要释放时自动为空。

注意:我们创建的对象默认是强引用,比如:People = [People new];等价__strong People = [People new];

下面我们讲述的内容都围绕着这三个准则。

一、局部对象

首先创建一个工程,然后添加一个类People,下面为People的.m文件内容。

 

 1 @implementation People
 2 -(id)init
 3 {
 4     if (self = [super init])
 5     {
 6         NSLog(@"%s",__FUNCTION__);
 7     }
 8     return self;
 9 }
10 -(void)dealloc
11 {
12     NSLog(@"%s",__FUNCTION__);
13 }
14 @end
People.m

相关文章: