例如
@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开始的对吧?