autorelease简介

autorelease方法的基本作用

  给对象发送一条autorelease消息,会将对象放到一个自动释放池中

  当自动释放池被销毁时,会对池子里面的所有对象做一次release操作

  会返回对象本身

  调用完autorelease方法后,对象的计数器不变

autorelease的好处

  不用在关心对象释放的时间

  不用再关心什么时候调用release

autorelease的使用注意

  占用内存较大的对象不要随意使用autorelease

  占用内存较小的对象使用autorelease,没有太大影响

自动释放池

  在iOS程序运行过程中,会创建无数个池子。这些池子都是以栈结构存在(先进后出)

  当一个对象调用autorelease方法时,会将这个对象放到栈顶的释放池

autorelease的常见错误

  alloc之后调用了autorelease,又调用release

  Person *p = [[[Person alloc] init] autorelease];

  [p release];

连续调用多次autorelease

  Person *p = [[[[Person alloc] init] autorelease] autorelease];

autorelease和release使用对比

使用release

  Book *book = [[[Book alloc] init] autorelease];

  [book release];

使用autorelease

  Book *book = [[[Book alloc] init] autorelease];

  //不要再调用[book release];

autorelease的应用场合

  1、一般可以为类添加一个快速创建对象的类方法

  + (id)book {

    return [[[self alloc] init] autorelease];

  }

  外界调用[Book book]就可以获得和使用新建的Book对象,根本不用考虑在什么时候释放Book对象

  2、一般来说,除了alloc、new或copy之外的方法创建的对象都被声明了autorelease

  3、比如下面的对象都已经是autorelease的,不需要再release

  NSNumber *n = [NSNumber numberWithInt:100];

  NSString *s = [NSString stringWithFormat:@"jack"];

  NSString *s2 = @"rose";

posted @ 2015-09-23 10:48  Saurik  阅读(167)  评论(0编辑  收藏  举报