autorelease
来源:互联网 发布:经期提前 知乎 编辑:程序博客网 时间:2024/05/22 05:15
1.Autorelease对象什么时候释放?
如果答案是“当前作用域大括号结束时释放”,显然木有正确理解Autorelease机制。
在没有手加Autorelease Pool的情况下,Autorelease对象是在当前的runloop迭代结束时释放的,而它能够释放的原因是系统在每个runloop迭代中都加入了自动释放池Push和Pop.
/* 小代码 */
__weak id reference = nil;
- (void)viewDidLoad {
[super viewDidLoad];
NSString *str = [NSString stringWithFormat:@”sunnyxx”];
// str是一个autorelease对象,设置一个weak的引用来观察它
reference = str;
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSLog(@”%@”, reference); // Console: sunnyxx
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLog(@”%@”, reference); // Console: (null)
}
由于这个vc在loadView之后便add到了window层级上,所以viewDidLoad和viewWillAppear是在同一个runloop调用的,因此在viewWillAppear中,这个autorelease的变量依然有值。
当然,我们也可以手动干预Autorelease对象的释放时机:
- (void)viewDidLoad
{
[super viewDidLoad];
@autoreleasepool {
NSString *str = [NSString stringWithFormat:@”sunnyxx”];
}
NSLog(@”%@”, str); // Console: (null)
}
- autorelease
- autorelease
- autorelease
- autorelease
- @autorelease
- autorelease
- Autorelease
- Autorelease
- autorelease
- autorelease
- autorelease
- release,autorelease,autorelease pool
- AutoRelease 浅析
- autorelease探究
- AutoRelease 浅析
- 理解autorelease
- Autorelease Pools
- 理解autorelease
- android中string.xml中%1$s、%1$d等的用法
- 关于zxing设置hints.put(EncodeHintType.MARGIN, 0)无明显效果的探究
- 正则表达式
- SqlServer中截取小数位数
- 【转】mysql索引总结----mysql 索引类型以及创建
- autorelease
- 一台电脑同时运行多个tomcat配置方法 (转)
- Java中快如闪电的线程间通讯
- 2-SAT:以 POJ 3905 - Perfect Election 为例
- Android fill_parent、wrap_content和match_parent的区别(转载整理)
- ASP.NET MVC图片管理(上传,预览与显示)
- Android的init过程(二):初始化语言(init.rc)解析
- 怎样按层次打印二叉树
- OpenGL ES教程系列(经典合集)