标题:
AutoreleasePool从入门到放弃(7)
[打印本页]
作者:
look_w
时间:
2019-3-8 19:43
标题:
AutoreleasePool从入门到放弃(7)
3.1 TLS优化
在MRC时代,autoreleased对象的创建与持有是以以下形式进行的:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
ViewController *obj = [ViewController viewController];
[obj retain];
[obj release];
}
+ (instancetype)viewController {
ViewController *obj = [[ViewController alloc] init];
return [obj autorelease];
}
alloc
autorelease
retain
release
按以上4个步骤依次进行,然而函数依次调用中autorelease、retain的作用效果又是相互抵消的。既然如此,我们为什么还要将对象进行入池、出池操作并进行一系列的内存管理呢?在代码中这样的无做功操作是十分常见的,所以在ARC时代编译器会根据函数的调用列表来判断autorelease之后是否紧接着调用了retain,如果是则将原本需要push进Autoreleasepool的对象直接返回给函数的调用方,免去繁琐的内存管理操作,从而对CPU调用进行优化。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0