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 {
[
|