block為什么要用copy?
首先, block是一個對象, 所以block理論上是可以retain/release的. 但是block在創建的時候它的內存是默認是分配在棧(stack)上, 而不是堆(heap)上的. 所以它的作用域僅限創建時候的當前上下文(函數, 方法...), 當你在該作用域外調用該block時, 程序就會崩潰.
意思就是 : 一般情況下你不需要自行調用copy或者retain一個block. 只有當你需要在block定義域以外的地方使用時才需要copy. Copy將block從內存棧區移到堆區.
其實block使用copy是MRC留下來的也算是一個傳統吧, 在MRC下, 如上述, 在方法中的block創建在棧區, 使用copy就能把他放到堆區, 這樣在作用域外調用該block程序就不會崩潰. 但在ARC下, 使用copy與strong其實都一樣, 因為block的retain就是用copy來實現的, 所以block使用copy還能裝裝逼, 說明自己是從MRC下走過來的..嘿嘿
作者:Jerry4me
鏈接:http://www.lxweimin.com/p/5254f1277dba
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。