zoukankan      html  css  js  c++  java
  • 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";

  • 相关阅读:
    FreeCodeCamp( FCC)前端工程师 基础算法练习 分析与解答
    关于AuthorizeAttribute使用
    互联网菜鸟历险记之一
    FreeMarker与Spring MVC的结合应用
    SpringMVC上传文件
    桥接模式
    在Openfire中使用自己的数据表之修改系统属性
    在Openfire中使用自己的数据表之修改配置文件
    SpringMVC中使用DWR
    基于注解的DWR使用
  • 原文地址:https://www.cnblogs.com/saurik/p/4831546.html
Copyright © 2011-2022 走看看