autorelease 基本用法
1,对象执行autorelease方法时会将对象添加到自动释放池中
2,当自动释放池销毁时自动释放池中所有对象作release操作
3,对象执行autorelease方法后自身引用计数器不会改变,而且会返回对象本身
autoreleased 对象什么时候释放autorelease 本质上就是延迟调用 release ,那 autoreleased 对象究竟会在什么时候释放呢?为了弄清楚这个问题,我们先来做一个小实验。这个小实验分 3 种场景进行,请你先自行思考在每种场景下的 console 输出,以加深理解。注:本实验的源码可以在这里 AutoreleasePool 找到。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
__weak NSString *string_weak_ = nil;
- (void)viewDidLoad {
[
super
viewDidLoad];
// 场景 1
NSString *string = [NSString stringWithFormat:@
"leichunfeng"
];
string_weak_ = string;
// 场景 2
// @autoreleasepool {
// NSString *string = [NSString stringWithFormat:@"leichunfeng"];
// string_weak_ = string;
// }
// 场景 3
// NSString *string = nil;
// @autoreleasepool {
// string = [NSString stringWithFormat:@"leichunfeng"];
// string_weak_ = string;
// }
NSLog(@
"string: %@"
, string_weak_);
}
- (void)viewWillAppear:(BOOL)animated {
[
super
viewWillAppear:animated];
NSLog(@
"string: %@"
, string_weak_);
}
- (void)viewDidAppear:(BOOL)animated {
[
|

本文详细介绍了Objective-C中Autorelease Pool的工作原理,通过实验分析了autorelease对象在不同场景下的释放时机。在场景1中,对象在viewWillAppear和viewDidAppear之间由autoreleasepool drain时释放。通过lldb的watchpoint验证了对象释放的精确时刻。同时,文章揭示了autoreleasepool的内存结构,以及在NSThread、NSRunLoop和NSAutoreleasePool之间的关系,帮助理解Objective-C内存管理机制。
最低0.47元/天 解锁文章
2204

被折叠的 条评论
为什么被折叠?



