黑马程序员-----内存管理(四)

来源:互联网 发布:淘宝美工有前途吗2016 编辑:程序博客网 时间:2024/06/05 18:17

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

内存管理——autorelease
1、autorelease方法(半自动)
1>延迟对象的释放时间,只有是等pool销毁以后才会释放对象。
2>autorelease方法返回对象本身
3>autorelease会将对象放入到一个自动释放池中
4>OC程序在运行时会自动创建一个自动释放池
5>当自动释放池被销毁,会对池子里的所有对象做一次release操作。
6>调用完autorelease方法后,对象的计数器不变

2、自动释放池的创建
1>Xcode5.0以后的创建方法
@autoreleasepool
{//释放池创建
 //所有的代码  
}//释放池销毁
2>释放池可以无限嵌套
int main()
{
 autoreleasepool
 {
  //释放池1 
  autoreleasepool
  {

  }

  //释放池2
  autoreleasepool
  {

  }
 
 }
 return 0;
}

3、autorelease类方法
在开发过程中我们通常会提供一些类方法,来快速创建autorelease对象(对象并放进释放池)
+ (id)person
{
 return [[[self alloc] init] autorelease];
}

+ (id)personWithAge:(int)age
{
 Person *p = [[[self alloc] init] autorelease];
 p.age = age;
 return p;
}

4、注意
1>系统自带的方法里面没有包含alloc,new,copy,说明返回的对象都是autorelease过的。
2>设计方法的时候,方法名是以类名开始的。

5、小零碎
1>autorelease可以不用关心对象的释放。
2>不能精确控制对象释放,占用内存比较大的对象不要使用autorelease,因为只有池子释放才能够释放对象,这样可能大内存不能够及时释放,影响性能。
3>不能再autorelease方法后,不能再调用release或者autorelease
4>在程序运行当中会生成无数个autoreleasepool在栈中(特定栈)
5>新生成的autoreleasepool在栈顶。
6>开发当中经常会提供一些类方法来快速创建一个autorelease对象。
7>创建类方法时,创建对象不要直接使用类名,一般使用self

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com
0 0