HardBirch

Objective-C – retain release autorelease

时间:15-10-05 栏目:iOS游戏开发技术, iOS移动应用开发技术 作者:魔豆先生 评论:0 点击: 2,112 次

Objective-C在管理内存时,遵循一套简单的规则。

每一个对象都有一个名为"retainCount"的变量,它表示该对象有多少个引用。

  1. class *obj = [class alloc];//alloc会导致retainCount为1
  2. [obj retain];//retainCount++ 通常在对象赋值之后这样做,代表它多了一个引用。
  3. [obj release];//retainCount-- 通常在使用完该对象的时候这样做。

当 retainCount为0时,运行时环境会通过调用[obj dealloc]来释放对象占用的内存。

 

下面 看一个例子:

 

  1. Test *t1 = [[Test alloc] initWithNum:12];//创建了一个对象,t1是该对象的引用,由于调用了alloc此时retainCount为1
  2. Test *t2 = t1;//此时t2也要使用该对象
  3. [t2 retain];//t2要使用对象 就必须要retain,此时retainCount为2
  4. [t1 release];//t1这时不用该对象了 就release了,也就是放弃了对象的使用权,此时retainCount为1
  5. [t2 release];//t2使用完了 就release 此时retainCount为0,立刻会调用dealloc来释放内存

其实,规则很简单。谁使用谁就先retain,用完在release就可以了。这样就不会内存泄露了。

 

 

oc中存在一个autorelease pool,其实它是一个NSMutableArray。

把对象加入到autorelease pool:

 

  1. [obj autorelease];

autorelease在释放的时候会给所有的对象发送release,如果该对象的retainCount为1,那么结果导致 retainCount为0,然后运行时就会调用对象的dealloc,以此来实现内存释放。

 

如果你

[obj retain];

之后没有

[obj release];

在autorelease pool 释放的时候一样会内存泄露!记住autorelease pool只是给对象发送一次release而已!

声明: 本文由( 魔豆先生 )原创编译,转载请保留链接: Objective-C – retain release autorelease

Objective-C – retain release autorelease:等您坐沙发呢!

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐