关于autoreleasepool多层嵌套的哨兵对象作用
来源:6-7 自动释放池相关面试问题

瞅瞅
2019-11-27
例如
@autoreleasepool{
NSArray *array1 = [NSArray arrayWithArray:@[@1]];
@autoreleasepool{
NSArray *array2 = [NSArray arrayWithArray:@[@1,@2]];
}
NSArray *array3 = [NSArray arrayWithArray:@[@1,@2,@3]];
}
以上autoreleasepool嵌套的过程是
先插入了一个哨兵对象nil(1),
将array1入栈,
然后再插入一个哨兵对象nil(2),
将array2入栈,
接着内层释放池pop,next开始回退
array2 release出栈,
next回退到哨兵对象nil(2)的位置,
将array3入栈,
外层释放池pop,next回退,
array3 release,
array1 release,
next回退到哨兵对象nil(1)的位置,结束。
其实autoreleasepool多层嵌套中的哨兵对象 就是起到标示位的作用,用来告知某一层嵌套的autoreleasepool的起始位置,这样理解对吧?于老师
另外 如您PPT中描述,那这个AutoreleasepoolPage的栈底,应该是从main函数的@autoreleasepool开始的对吧?
写回答
1回答
-
于海
2019-11-27
arrayWithArray函数系统实现应该是有加autorelease的。其余部分描述基本正确
012019-11-27
相似问题
哨兵对象为nil 有什么作用?
回答 1
多层嵌套的数据结构
回答 1