想過retain和strong的區(qū)別嗎?以前認為他們是一樣的碾篡。今天發(fā)現(xiàn)有區(qū)別砍的。
retain和strong的區(qū)別在于修飾block的區(qū)別。我們都知道block應該使用copy進行修飾氨肌。先說結(jié)果:
在MRC(Manual Reference Counting)下
修飾block時鸿秆,strong相當于copy。
修飾block時怎囚,retain相當于assign卿叽。
導致結(jié)果:如果用strong修飾沒有問題,如果用retain修飾會崩潰恳守。報野指針錯誤考婴。
詳解:
在MRC下,block的存儲分為三塊:堆區(qū)催烘,棧區(qū)沥阱,全局區(qū)。在ARC下颗圣,block的存儲分為兩塊:全局區(qū)喳钟,堆區(qū)脓匿。
如果在MRC下毛俏,我們用全局變量對棧區(qū)的block進行了引用,然后修飾符還是使用的retain或者assign未蝌,那么結(jié)果就是后邊使用可能出現(xiàn)野指針訪問壞內(nèi)存蔽午。
結(jié)論就是block使用strong或者copy進行修飾最安全易茬。