autoreleasepool底层原理

官方文档介绍

自动释放池存储在池本身排出时发送发布消息的对象。

如果你使用自动引用计数(ARC),你不能直接使用自动释放池。相反,你可以使用@autoreleasepool块。

1
2
3
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// Code benefitting from a local autorelease pool.
[pool release];

可以写成:

1
2
3
@autoreleasepool {
// Code benefitting from a local autorelease pool.
}

在我们的ARC模式下,我们不可以直接使用自动释放池,可以用@autoreleasepool的block块代替。@autoreleasepool的block块比直接使用NSAutoreleasePool实例使用更有效。即使不是ARC模式,也可以使用。

问题

Q:主线程创建临时变量,什么时候会销毁?