autorelease用法
来源:互联网 发布:安润金融 知乎 编辑:程序博客网 时间:2024/06/08 16:43
- autorelease自动释放池
- autorelease 的用法
- autorelease 快速创建对象的方法
autorelease(自动释放池)
- 1.autorelease介绍
- 1)在iOS程序运行过程中,会创建无数个池子,这些池子都是以栈结构(先进后出)存在的。
- 2) 当一个对象调用autorelease时,会将这个对象放到位于栈顶的释放池中
2.autorelease的创建方式 1)iOS 5.0以前的创建方式
- 2)iOS 5.0 以后
//iOS 5.0以前的创建方式NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];//中间是在autoreleasepool中的代码[pool release];//[pool drain];用于mac
//5.0之后@autoreleasepool{ //在这里创建的对象,都会自动调用autorelease} //在autorelease 结束时,会自动向代码块中的每一个对象发送release消息
autorelease 的用法
1.创建的对象,要在autoreleasepool中调用autorelease方法
#import <Foundation/Foundation.h>#import "Person.h" //假设已有一个Person类int main(int argc, const char * argv[]){ @autoreleasepool{ Person p = [Person new]; [p autorelease];//这样p就被加入了当前的autoreleasepool中 //不过一般不这样用了,因为在创建一个对象时,会自动调用autoreleae方法。 } return 0;}
2.自动释放池的嵌套使用
Person *p = [Person new];[p retain];@autoreleasepool{ @autoreleasepoo{ [p autorelease]; //先执行最内部的autorelesepool,在该autorelease结束时,给p发送release消息,p的retainCount变为1 } [p autorelease]; //再将p加入到外部autoreleasepool中,该池结束时,给p发送release消息,p的retainCount变为0,对象p被销毁}
3.自动释放池不宜放占用内存比较大的对象
1)尽量避免对大内存使用该方法,对于这种延迟释放机制,会造成短时间内内存的上涨。
2)不要把大量循环操作放到同一个@autorelease之间,这样会造成内存峰值的上升
autorelease 快速创建对象的方法
Person.h文件
#import <Foundation/Foundation.h>@interface Person : NSObject+(instancetype)person;@end
Person.m文件
#import "Person.h"@implementation Person+(instancetype)person{ return [[[Person alloc] init] autorelease]; //返回的是对象的空间,这样就可以帮我们自动的把对象加入到自动释放池}@end
版权声明:本文为博主原创文章,未经博主允许不得转载。
0 0
- autorelease用法
- object-c @autorelease的用法
- autorelease注意和错误用法
- autorelease
- autorelease
- autorelease
- autorelease
- @autorelease
- autorelease
- Autorelease
- Autorelease
- autorelease
- autorelease
- autorelease
- retain、copy、assign、 strong、weak、autorelease的用法和区别
- release,autorelease,autorelease pool
- 学习笔记:Objective C 的内存管理(3)----@class以及Autorelease用法
- 黑马程序员---OC学习笔记之autorelease注意及错误用法
- php 的定界符 <<<eof 的问题
- php 函数method_exists()与is_callable()的区别
- hdu 5417 Victor and Machine 模拟
- 什么是高内聚、低耦合?
- 关于局域网访问不了red5
- autorelease用法
- 关于Myeclipse导入ExtJS出错的问题解决:
- SQL中char、varchar、text区别
- 窗口、视口、屏幕显示详解
- tomcat负载均衡
- UIButton3
- lightoj 1044 Palindrome Partitioning(dp)
- 更改myeclipse中的@author
- No Java runtime present, requesting install.