Board logo

标题: 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