NSAutoReleasePool使用中drain和release的区别
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
雖然ARC引入之后NSAutoReleasePool的使用有了很大變化,但是了解NSAutoReleasePool的機(jī)制還是十分必要的,下面主要說一下:
NSAutoReleasePool * pool = [NSAutoReleasePool alloc] init];
//do something
之后,
[pool drain] 和 [pool release] 的區(qū)別:
release,在引用計(jì)數(shù)環(huán)境下,由于NSAutoReleasePool是一個不可以被retain的類型,所以release會直接dealloc pool對象。當(dāng)pool被dealloc的時候,pool向所有在pool中的對象發(fā)出一個release的消息,如果一個對象在這個pool中autorelease了多次,pool對這個對象的每一次autorelease都會release。在GC環(huán)境下release是一個no-op操作(代表沒有操作,是一個占據(jù)進(jìn)行很少的空間但是指出沒有操作的計(jì)算機(jī)指令)。
drain,在引用計(jì)數(shù)環(huán)境下,它的行為和release是一樣的。在GC的環(huán)境下,這個方法調(diào)用objc_collect_if_needed出發(fā)GC。
因此,重點(diǎn)是:在GC環(huán)境下,release是一個no-op,所以除非你不希望在GC環(huán)境下出發(fā)GC,你都應(yīng)該使用drain而不是使用release來釋放pool。
轉(zhuǎn)載于:https://my.oschina.net/dake/blog/196645
總結(jié)
以上是生活随笔為你收集整理的NSAutoReleasePool使用中drain和release的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何向妻子解释OOD
- 下一篇: 自己动手实现简易代码生成器、采用文本模板