- 临时变量什么时候释放?
- 自动释放池原理?
- 自动释放池能否嵌套使用?
- 在产生很多临时变量的时候使用,出了释放池范围则进行释放。
- 自动释放池是一个双向链表,里边有
child
和parent
指针,自动分页,4k一页,当第一页满的话,则next
指向第二页。- 可以嵌套使用。
#define POOL_BOUNDARY nil
是哨兵,当新建page
的时候第一次插入,作用是release
的时候,倒序销毁到哨兵,这个page
就为空了。
@implementation SSLPerson
- (void)dealloc
{
NSLog(@"%s", __func__);
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
@autoreleasepool {
SSLPerson *person = [[[SSLPerson alloc] init] autorelease];
}
NSLog(@"%s", __func__);
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSLog(@"%s", __func__);
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSLog(@"%s", __func__);
}
@end
运行结果:
-[SSLPerson dealloc]
-[ViewController viewDidLoad]
-[ViewController viewWillAppear:]
-[ViewController viewDidAppear:]
可以看到,手动添加到指定的@autoreleasepool
中的autorelease
对象,在@autoreleasepool
大括号结束时就会释放了,不受RunLoop
控制.
释放在viewdidLoad
之前,就是 结构体出栈销毁。