retain和strong的區(qū)別

想過retain和strong的區(qū)別嗎?以前認為他們是一樣的。今天發(fā)現(xiàn)有區(qū)別。

retain和strong的區(qū)別在于修飾block的區(qū)別。我們都知道block應(yīng)該使用copy進行修飾。先說結(jié)果:

在MRC(Manual Reference Counting)下

修飾block時,strong相當于copy。

修飾block時,retain相當于assign。

導(dǎo)致結(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進行修飾最安全。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 Blocks是C語言的擴充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了這...
    小人不才閱讀 3,851評論 0 23
  • 《Objective-C高級編程》這本書就講了三個東西:自動引用計數(shù)、block、GCD,偏向于從原理上對這些內(nèi)容...
    WeiHing閱讀 10,085評論 10 69
  • __block和__weak修飾符的區(qū)別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,584評論 0 6
  • 11.看下面的程序,第一個NSLog會輸出什么?這時str的retainCount是多少?第二個和第三個呢? 為什...
    AlanGe閱讀 833評論 1 4
  • 一、深復(fù)制和淺復(fù)制的區(qū)別? 1、淺復(fù)制:只是復(fù)制了指向?qū)ο蟮闹羔?,即兩個指針指向同一塊內(nèi)存單元!而不復(fù)制指向?qū)ο蟮?..
    iOS_Alex閱讀 1,527評論 1 27

友情鏈接更多精彩內(nèi)容