zoukankan      html  css  js  c++  java
  • autorelease方法

     
    基本用法
    1,autorelease 方法会返回对象本身
    2,调用完autorelease方法后,对象的计数器不变
    2,autorelease 会将对象放到一个自动释放池中
    3,当自动释放池被销毁时,会对池子里面的所有对象做一次release操作
     
    autorelease的好处
    1》不用再关心对象释放的时间
    2》不用再关心什么时候调用release
     
    autorelease的使用注意
    1》占用内存较大的对象不要随便使用autorelease;
    2>占用用内存较小的对象使用autorelease,没有太大的影响
     
    错误写法:
    1》alloc之后调用了autorelease,又调用了release
    @autoreleasepool
    {
        Person * p  = [ [ [Person alloc] init]  autorelease]
        [ p  release];
    }
    2》连续调用多次autorelease
    @autoreleasepool
    {
        Person * p  =[ [ [ [Person alloc] init]  autorelease] release]
    }
    自动释放池
    1》在IOS程序运行过程中,会创建无数个池子,这些池子都是以栈结构存在(先进后出)
    2》当一个对象调用autorelease方法时,会将这个对象放到栈顶的释放池
     
    自动释放池的创建方式
    1》IOS5.0之前:
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]  init];
     
    [pool release] ; // [pool drain];
    2>IOS5.0开始
    @autoreleasepool
       {
       
       }
     
     
    1,系统自带的方法里没有包含alloc, new , copy,说明返回的对象都是autorelease,如NSString * s = @"adaf";
    2,开发中经常回提供一些类方法,快速创建一个已经autorelease过的对象
    1》创建对象时不要直接用类名,一般用self
    +(id) person
    {
        return  [ [ [self alloc]   init ]   autorelease];
    }
    int main ( ) {
    @autoreleasepool//必须加池子
       {
        Person * p =[  [ [Person alloc]   init ]   autorelease];
        }
    }
    可以在创建类方法精简Person的初始话:
    +(id) person
    {
        return  [ [ [Person alloc]   init ]   autorelease];
    }
  • 相关阅读:
    【python】构造字典类型字典
    【python】序列化和反序列化
    【python】进程
    【python】类中属性方法@property使用
    【python】类中__slots__使用
    【python】类的继承和super关键字
    【python】类的访问限制
    【python】模块作用域
    【python】删除1~100的素数
    【python】函数相关知识
  • 原文地址:https://www.cnblogs.com/shuizhuqing/p/4457330.html
Copyright © 2011-2022 走看看