美文网首页
内存管理与自动引用计数—第二日

内存管理与自动引用计数—第二日

作者: 徐恩_ | 来源:发表于2016-11-15 23:25 被阅读0次

1.2.5 autorelease

本节作者引出一个观点:autoreleasePool相当于C语言中的局部变量,当作用域结束的时候废弃(并释放池内的所有对象)

NSAutoreleasePool的调用:

创建并持有pool

调用已分配的对象的autorelease方法

释放pool

1.2.6 & 1.2.7 GNU&苹果的实现

-  (id)autorelease {

[NSAutoreleasePool addobject:self];

}

+ (void)addObject:(id)anyObject {

NSAutoreleasePool *pool = [获取当前的pool];

}

获取当前的pool一般为最内侧的pool,例如:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

NSAutoreleasePool *pool1 = [[NSAutoreleasePool alloc] init];

NSAutoreleasePool *pool2 = [[NSAutoreleasePool alloc] init];

NSObject *obj = [[NSObject alloc] init];

[obj autorelease]

此时获取的为pool2。

个人感觉有点像大括号(手动滑稽)。

GNUstep的autoreleasePool使用连续表实现的,如果对象调用autorelease方法,那么这个对象将会追加到pool对象的数组里。

苹果的实现

太长,不想看。。。嗯,看不大明白。。。

可以通过NSAutoreleasePool的调试用非公开类方法showPools来确认已被autorelease的对象方法。showPools方法会将当前的pool的状况输入到控制台。

1.2 完

相关文章

网友评论

      本文标题:内存管理与自动引用计数—第二日

      本文链接:https://www.haomeiwen.com/subject/jxblpttx.html