autorelease

1.autorelease的基本用法

1> 会将对象放到一个自动释放池中

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

3> 会返回对象本身

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

2.autorelease的好处

1> 不用再关心对象释放的时间

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

3.autorelease的使用注意

1> 占用内存较大的对象不要随便使用autorelease

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

4.错误写法

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

@autoreleasepool

{

// 1

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

// 0

[p release];

}

2> 连续调用多次autorelease

@autoreleasepool

{

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

}

5.自动释放池

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

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

6.自动释放池的创建方式

1> iOS 5.0前

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

[pool release]; // [pool drain];

<>

2> iOS 5.0 开始

@autoreleasepool

{

}

时间: 2024-10-25 17:36:36

autorelease的相关文章

OC Autorelease

一.基本用法 1.会将对象放到一个自动释放池中 2.当自动释放池被销毁时,会对池子里的所有对象做一次release 3.会返回对象本身 4.调用完autorelease方法后,对象的计数器不受影响(销毁时影响) 二.好处 1.不需要关系想你对象释放的时间, 2.不需要再关心什么时候调用release 三.使用注意 1.占用内存比较大得对象,不要随便使用autorelease,应该使用release来精确控制 2.占用内存较小的对象使用autorelease,没有太大的影响 ///////////

autorelease和autoreleasepool应该知道的那些点

一个Cocoa对象生命周期,有明确的轨迹 一 ,autorelease: 对象执行autorelease方法时会将对象添加到自动释放池中 当自动释放池销毁时自动释放池中所有对象作release操作 对象执行autorelease方法后自身引用计数器不会改变,而且会返回对象本身 autorelease实际上只是把对象release的调用延迟了,对于对象的autorelease系统只是把当前对象放入了当前对应的autorelease pool中,当该pool被释放时([pool drain]),该p

ARC forbids explicit message send of &quot;autorelease&quot;

答:开了ARC就不能发送autorelease消息了

iOS autorelease使用详解

1.作用 1.1 给对象发送一条autorelease消息, 会将对象放到一个自动释放池中 1.2 当自动释放池被销毁时,会对池子里面的所有对象做一次release操作 1.3 会返回对象本身 1.4 调用完autorelease方法后,对象的计数器不变 2.好处 2.1 不用再关心对象释放的时间,有利于规避坏内存访问的出现 2.2 不用再关心什么时候调用release 3. 使用注意 3.1 占用内存较大的对象不要随便使用autorelease 3.1 占用内存较小的对象使用autorelea

xcode arc引起的autorelease报错问题

http://blog.csdn.net/xiechengfa/article/details/37971223 自从用上了真苹果,一直升级,现在xcode版本是4.4,或者说是ios5 一直有个问题,就是在release或者autorelease或者NSAutoreleasePool都报错 原来是ios5有个新功能,就是 Automatic Reference Counting---内存自动回收 还真不习惯. 关闭的话  项目详情->BuildSettings -> Apple LLVM c

Autorelease Pool

现在已经是 ARC 时代了,但是了解更多的 Objective-C 的内存管理机制仍然是十分必要的.一直以来我都弄不清楚 autorelease 的原理,后面看了很多资料,才慢慢了解到 autorelease 的原理. - (void)test { NSString *string = [NSString stringWithFormat:@"liuluoxing"]; NSString *string_weak_ = string; } 下面我们来捋一捋这个变量的内存引用计数的变化:

妥善使用autorelease()方法

autorelease()并不是毫无代价的,其背后的垃圾池机制同样需要占用内存和CPU资源,每次执行autorelease()的过程,实际上对应的是执行成对的retain()和release(),以及一次成对的容器存取,还包括其他的逻辑判断.过多不必要的autorelease()将导致垃圾池臃肿. 此外,autorelease()只有在自动释放池被释放时才会进行一次释放操作,如果对象释放的次数超过了应有的次数,则这个错误在调用autorelease()时并不会被发现,只有当自动释放池被释放时(通

Objective-C Autorelease Pool 的实现原理

内存管理一直是学习 Objective-C 的重点和难点之一,尽管现在已经是 ARC 时代了,但是了解 Objective-C 的内存管理机制仍然是十分必要的.其中,弄清楚 autorelease 的原理更是重中之重,只有理解了 autorelease 的原理,我们才算是真正了解了 Objective-C 的内存管理机制.注:本文使用的 runtime 源码是当前的最新版本 objc4-646.tar.gz . autoreleased 对象什么时候释放 autorelease 本质上就是延迟调

黑马程序员---OC基础6【内存管理】【手动内存管理】【单、多个对象的内存管理】【*@property参数】【@class的使用】【NSString类的内存管理】【autorelease使用】

------- iOS培训.Android培训.Java培训.期待与您交流! ---------- [内存管理] 1.内存管理概念 由于移动设备内存及其有限,所以每个app所占的内存也是有限的 需要回收一些不使用的空间 2.OC内存管理的范围 管理任何继承NSOject的对象,对其他的基本数据类型无效 主要管理堆区中的对象的内存管理   3.内存管理的原理 1)对象所有权概念 任何对象都可以能拥有一个或多个所有者,只要一个对象至少还拥有一个所有者,他就会继续存在 cocoasu所有权策略 任何自

24-黑马程序员------OC 语言学习笔记--- autorelease和ARC

  黑马程序员------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- autoreleaseOC提供了autorelease语法,系统可以將很多对象放到一个自动释放池中,在某个时刻统一release一次.这样就不用再次调用release方法.1.autorelease的基本用法:   1>