首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

AutoreleasePool从入门到放弃(7)

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调用进行优化。








返回列表