autorelease方法

时间:2022-11-06 16:04:55
 
基本用法;
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];
}

autorelease方法的更多相关文章

  1. 2016 - 2 - 20 ARC知识总结(二 autorelease概念及实现)

    首先祝自己生日快乐~23咯~ 一  autorelease的概念 autorelease会像C语言的自动变量那样来对待对象实例.当超出作用域(相当于变量作用域)时,对象的实例release实力方法被调 ...

  2. 【原】你真的懂iOS的autorelease吗?

    或许这个题目起得有点太高调了,不过我只是想纠正一些童鞋对于autorelease的认识,如果能帮到几个人,那这篇文章也就值得了!当然,高手请绕道 本文主要探讨两个方面:(1)autorelease对象 ...

  3. 关于内存管理/set/get方法

    MRC状态下 1 任何继承NSObject的对象,存放于堆控件中,都需要手动管理内存 .2 基本数据类型放到栈中,对象放到堆空间中,内存是有系统管理的.(int\float\enum\struct) ...

  4. autorelease基本概念

    // //  main.m //  01-autorelease基本概念 // //  Created by apple on 14-3-18. //  Copyright (c) 2014年 app ...

  5. Objective-C 【autorelease基本使用】

    ------------------------------------------- NSString中的内存管理问题 由于autoreleasepool的存在,对于内存管理就会很复杂,retain ...

  6. autorelease 的基本使用

    5-autorelease 的基本使用 0,引入 Person *p = [Persom new];[p release]; [p run]; [p run]; // 希望不立即释放,待 run执行完 ...

  7. iOS内存管理系列之二:自动释放与便捷方法

    有时候一个所有者创建一个对象后,会立刻将该对象的指针传递给其它所有者.这时,这个创建者不希望再拥有这个对象,但如果立刻给它发送一个release消息会导致这个对象被立刻释放掉——这样其它所有者还没有来 ...

  8. 1218.1——OC中的常见关键字及一些基本方法

    OC常见的关键字介绍: @ 看到这个关键字,我们就应该想到,这是Object-C对C语言的扩展,例如@interface XXX. @interface 声明类 @implementation 实现类 ...

  9. iOS基本内存管理:autorelease和autoreleasepool

    1.autorelease 基本用法 对象执行autorelease方法时会将对象添加到自动释放池中 当自动释放池销毁时自动释放池中所有对象作release操作 对象执行autorelease方法后自 ...

随机推荐

  1. VS Build目录下各文件的作用

    VS2010中各种类型文件的作用: .sln 相当于VC6中 .dsw    .vcxproj 相当于VC6中 .dsp    .suo 相当于VC6中 .ncb    .vcxproj.filter ...

  2. 常见UI布局之1-2-1单列变宽布局

    扩展前一篇“上中下三栏布局”,中间栏划分成两列,一列宽度固定,一列宽度随浏览器窗口宽度的变化而变化.固定宽度列定义为#side,可分为左侧布局和右侧布局,分别实现如下: 1-2-1左侧固定宽度布局 & ...

  3. Gated Recurrent Unit (GRU)公式简介

    update gate $z_t$: defines how much of the previous memory to keep around. \[z_t = \sigma ( W^z x_t+ ...

  4. 基本的文件 I/O

    基本的文件 I/O MSDN 抽象基类 Stream 支持读取和写入字节.Stream 集成了异步支持.其默认实现根据其相应的异步方法来定义同步读取和写入,反之亦然. 所有表示流的类都是从 Strea ...

  5. 用nginx做代理服务器上网

    用nginx做代理服务器上网 目前现状:只有1个机器能上网(web),其他机器不能方法:能上网的做一个代理web服务器中转,其他机器连接它即可.采用nginx Nginx配置如下: server{   ...

  6. android 网络交互

    一. 在Android中,发送和处理http请求实在太常见了,以至于我们经常需要写这方面的代码. Android中网络交互的代码不能在UI线程中执行,只能在额外的子线程中执行. 我一般的做法是通过创建 ...

  7. Express全系列教程之(二):Express的路由以及动态路由

    一.Express路由简介 路由表示应用程序端点 (URI) 的定义以及响应客户端请求的方式.它包含一个请求方时(methods).路径(path)和路由匹配时的函数(callback); app.m ...

  8. Configuring Automatic Restart of an Oracle Database

    https://docs.oracle.com/cd/E11882_01/server.112/e25494/restart.htm#ADMIN12708

  9. PTA最短工期

    一个项目由若干个任务组成,任务之间有先后依赖顺序.项目经理需要设置一系列里程碑,在每个里程碑节点处检查任务的完成情况,并启动后续的任务.现给定一个项目中各个任务之间的关系,请你计算出这个项目的最早完工 ...

  10. php 7.1安装教程

    一.下载地址 http://php.net/downloads.php#v7.1.9 IIS如果你使用的是PHP的FastCGI IIS,你应该使用非线程安全(NTS)版本的PHP. Apache请使 ...