Objective-C的自动释放池(autoreleasepool)、静态方法快速创建对象
来源:互联网 发布:淘宝信鸽 编辑:程序博客网 时间:2024/06/10 05:26
自动释放池(autorelease pool)
1、是OC里面的一种内存自动回收机制,一般可以将一些临时变量添加到自动释放池中,统一回收
2、当自动释放池销毁时,池里面的所有对象都会调用一次release方法
方法:
(a)OC对象只需要发送一条autorelease消息,就会把这个对象添加到最近的自动释放池中(栈顶的释放池)
(b)autorelease实际上只是把release的调用延迟了,对于每一次autorelease,系统只是把对象放入了当时的
autorelease pool中,当该pool被释放时,该pool中的对象会被调用release。
//创建一个自动释放池
@autoreleasepool{
Student * stu = [[Student alloc] init];
[stu autorelease]; //这句的意思是把对象放到autoreleasepool 的池子中,不会改变对象计数器,只是把对象放到池子中
}
当自动释放池被销毁的时候,所有对象自动调用release方法
静态方法快速创建OC对象:
静态方法返回的对象,是自动释放的。不需要管理内存。因此,自己创建的静态方法,最好也要保证对象是自动释放的。
如果一个类要创建一个方法来快速创建对象的话,方法名和类名称一样,并且方法名小写
@interface Student:NSObject
//静态方法,快速创建给一个对象
+(id) student;
@end;
@implementation Student
+(id) student{
Student * stu = [ [[Student alloc] init] autorelease];
return stu;
}
@end
int main(int argc, const char * argv[]){
@autoreleasepool{
Student * stu = [Student student];
}
}
使用自动释放池的注意事项:
1、在ARC环境下,不能使用[[NSAutoreleasePool alloc] init],而应当使用@autoreleasepool
2、在@autoreleasepool中要尽量避免用循环的方式创建大量对象。这样会造成内存峰值的上升
3、尽量避免对大内存使用该方法,对于这种延迟释放机制,还是尽量少用
4、sdk中一般利用静态方法创建并返回的对象都是已经autorelease的,不需要再进行release 操作
- Objective-C的自动释放池(autoreleasepool)、静态方法快速创建对象
- Objective-C自动释放池AutoreleasePool详解
- [Objective-C] 自动释放池(Autoreleasepool)--拆迁队的外援
- 自动释放池autoreleasepool
- 自动释放池 (autoReleasePool)
- 自动释放池autoreleasepool
- @autoreleasePool 自动释放池
- @autoreleasepool 创建自动释放连接池(内存管理)
- Objective c 自动释放池
- 自动释放池的前世今生 ---- 深入解析 autoreleasepool
- Objective-C使用静态方法创建字符串对象
- ios自动释放池(autoreleasepool)
- ios自动释放池相关,autoreleasepool;
- 刀哥多线程自动释放池autoreleasepool
- Autoreleasepool自动释放池与内存相关
- iOS内存管理之:引用计数、ARC、自动释放池autoreleasepool和便捷方法之间的关系
- 移动开发:iOS内存管理之:引用计数、ARC、自动释放池autoreleasepool和便捷方法之间的关系
- iOS内存管理之:引用计数、ARC、自动释放池autoreleasepool和便捷方法之间的关系
- 程序员之深刻的思辨和严密的体系结构
- 嵌入式学习经验谈
- java中Socket应用
- XHTML与html5大辨析
- CMSFlexGrid的用法
- Objective-C的自动释放池(autoreleasepool)、静态方法快速创建对象
- RelativeLayout相对布局
- jquery easyui 1.3.1 validatebox组合验证validType只能验证其中的一个,还是不能一起验证!!!
- Android Recovery模式 (转载)
- android遇到的报错问题
- c++ 窗体 构造 以及winsows消息
- leveldb
- poj1151 hdu1542 wikioi3044 Atlantis 矩形面积求并
- 求两个字符串的最大公共字串