• 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";

  • 相关阅读:
    Mybatis学习二(字段名与实体类属性名不相同/关联查询)
    SpringMVC学习二(日期参数/数据保存/重定向)
    Mybatis学习四(分页助手pagehelper)
    Mybatis学习三(动态sql语句)
    https详解
    http协议详解(超详细)
    Hdu 1072 【广搜】.cpp
    Hdu 1534 【差分约束系统】.cpp
    Hdu 1305 【字典树】.cpp
    并发
  • 原文地址:https://www.cnblogs.com/saurik/p/4831546.html
Copyright © 2020-2023  润新知