autorelease
来源:互联网 发布:手机淘宝二维登录 编辑:程序博客网 时间:2024/05/21 19:31
代码:
__weakid reference = nil;
__weakid reference2 = nil;
__weakid reference3 = nil;
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSArray *arr = [NSArrayarrayWithObject:@(92)];
reference = arr;
@autoreleasepool {
NSArray *arr2 = [NSArrayarrayWithObjects:@(22),@(33), [NSStringstringWithFormat:@"i was a string"],nil];//[NSString stringWithFormat:@"i was a string"]在堆里;@(22), @(33) 是常量,一直有。
reference2 = arr2;
[arr2enumerateObjectsUsingBlock:^(id obj,NSUInteger idx, BOOL *stop) {
if (!stop) {
NSLog(@"stop");
}
if (idx==2) {
reference3 = obj;
}
NSLog(@"reference3 %@",reference3);
NSLog(@"enumerate:%@ %lu %p", obj, (unsignedlong)idx, stop);
}];
NSLog(@"reference3 %@",reference3);
NSLog(@"%@", [reference3stringByAppendingFormat:@"hello"]);
NSLog(@"reference2 %@",reference2);
}
// reference3 = @"123";
NSLog(@"%@", [reference3stringByAppendingFormat:@"hello"]);
NSLog(@"reference3 %@",reference3);
NSLog(@"reference2 %@",reference2);
}
- (void)viewWillAppear:(BOOL)animated{
[superviewWillAppear:animated];
NSLog(@"viewWillAppear:%@",reference);
NSLog(@"reference3 %@",reference3);
}
- (void)viewDidAppear:(BOOL)animated{
[superviewDidAppear:animated];
NSLog(@"viewDidAppear:%@",reference);
[referenceremoveAllObjects];
NSLog(@"reference3 %@",reference3);
}
2015-04-01 14:02:20.632 AutoreleaseTest[1904:567209] reference3 (null)
2015-04-01 14:02:20.632 AutoreleaseTest[1904:567209] enumerate:22 0 0x7fff5d363a1f
2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] reference3 (null)
2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] enumerate:33 1 0x7fff5d363a1f
2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] reference3 i was a string
2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] enumerate:i was a string 2 0x7fff5d363a1f
2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] reference3 i was a string
2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] i was a stringhello
2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] reference2 (
22,
33,
"i was a string"
)
2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] (null)
2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] reference3 (null)
2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] reference2 (null)
2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] viewWillAppear:(
92
)
2015-04-01 14:02:20.633 AutoreleaseTest[1904:567209] reference3 (null)
2015-04-01 14:02:20.643 AutoreleaseTest[1904:567209] viewDidAppear:(null)
2015-04-01 14:02:20.647 AutoreleaseTest[1904:567209] reference3 (null)
在没有手加Autorelease Pool的情况下,Autorelease对象是在当前的runloop
迭代结束时释放的,而它能够释放的原因是系统在每个runloop迭代中都加入了自动释放池Push和Pop.
- autorelease
- autorelease
- autorelease
- autorelease
- @autorelease
- autorelease
- Autorelease
- Autorelease
- autorelease
- autorelease
- autorelease
- release,autorelease,autorelease pool
- AutoRelease 浅析
- autorelease探究
- AutoRelease 浅析
- 理解autorelease
- Autorelease Pools
- 理解autorelease
- RFID第二次作业
- 物联网1122(11)第二次作业
- 提问0331
- ActionContextCleanUp的作用
- 浅谈mysql主从复制的高可用解决方案
- autorelease
- 编码之道:取个好名字很重要
- iOS Xcode 6: 模拟器中的键盘不显示 解决方案
- bt 打印
- C#设计模式(2)——简单工厂模式
- OpenCV起步常见问题
- 30年前竟是一家?Intel/AMD CPU的那些事
- jasperreport超链接
- 清除和新建WordPress数据库