NSAutoReleasePool使用中drain和release的区别
為什么80%的碼農都做不了架構師?>>> ??
雖然ARC引入之后NSAutoReleasePool的使用有了很大變化,但是了解NSAutoReleasePool的機制還是十分必要的,下面主要說一下:
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。
因此,重點是:在GC環境下,release是一個no-op,所以除非你不希望在GC環境下出發GC,你都應該使用drain而不是使用release來釋放pool。
轉載于:https://my.oschina.net/dake/blog/196645
總結
以上是生活随笔為你收集整理的NSAutoReleasePool使用中drain和release的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何向妻子解释OOD
- 下一篇: 自己动手实现简易代码生成器、采用文本模板