NSAutoreleasePool释放时为什么经常用drain,不用release求答案

来源:学生作业帮助网 编辑:作业帮 时间:2024/10/08 11:13:36
NSAutoreleasePool释放时为什么经常用drain,不用release求答案
xSMsP+Y;~ȌEwä'& )AJB@;5$3ト@tFWsϹe㏟=zSPr$ yH{ڹKbZ.-0M3N焌!KCu5;h6/ޞވqۻ \F?M+\^y-^fdQ&ϐ=& $8P炋Esnzv%aompZ&fw;sb5︢ b cB wz {sNj<.h,-D,1 oG`yP"QG cUQjUt韉90.P/a'|ҷ_JD \{x uF}]7Xa5*!~*/vَnͤd徒G ֎JϞ>?t\Jh ic]<W*LZY`W0m2ijj햽le_Akgu:X}lI|feU_)ET!yE1-*niw'!U!g9~J

NSAutoreleasePool释放时为什么经常用drain,不用release求答案
NSAutoreleasePool释放时为什么经常用drain,不用release求答案

NSAutoreleasePool释放时为什么经常用drain,不用release求答案
NSAutoReleasePool * pool = [NSAutoReleasePool alloc] init];
//do something之后,
[pool drain] 和 [pool release] 的区别:release
,在引用计数环境下,由于NSAutoReleasePool是一个不可以被retain的类型,所以release会直接dealloc pool对象.当pool被dealloc的时候,pool向所有在pool中的对象发出一个release的消息,如果一个对象在这个pool中autorelease了多次,pool对这个对象的每一次autorelease都会release.在GC环境下release是一个no-op操作(代表没有操作,是一个占据进行很少的空间但是指出没有操作的计算机指令).
drain
,在引用计数环境下,它的行为和release是一样的.在GC的环境下,这个方法调用objc_collect_if_needed出发GC.
因此,重点是