__weak修飾後再block中使用__strong修飾問題
arc環境中使用weak 的修飾符來修飾乙個變數,防止其在block中被迴圈引用,而有些特殊情況下,我們在block中又使用__strong 來修飾這個在block外剛剛用__weak修飾的變數,這是因為在block中呼叫
self
會引起迴圈引用,而在block中需要對weakself進行__
strong
,保證**在執行到block中,
self
不會被釋放,當block執行完後,
會自動釋放該strongself;
如在
afnetworkreachabilitymanager中使用的**如下:
__weak __typeof(self)weakself = self;
afnetworkreachabilitystatusblock callback = ^(afnetworkreachabilitystatus status)
};
Block用copy來修飾
block使用copy是從mrc遺留下來的 傳統 在mrc中,方法內部的block是在棧區的,使用copy可以把它放到堆區.在arc中寫不寫都行 對於block使用copy還是strong效果是一樣的,但寫上copy也無傷大雅,還能時刻提醒我們 編譯器自動對block進行了copy操作。block在...
讀書筆記之 weak修飾詞
二 weak修飾詞 因為使用 strong修飾詞,易出現迴圈引用,使用 weak來解決。1 迴圈引用的例子 在類中成員變數可能出現的迴圈引用 inte ce test nsobject void setobject id strong obj end implementation test id i...
OC 為何用copy修飾block
簡單來說,block就像乙個函式指標,指向我們要使用的函式。就和函式呼叫一樣的,不管你在 寫了這個block,只要你把它放在了記憶體中 通過呼叫存在這個block的方 法或者是函式 不管放在棧中還是在堆中,還是在靜態區。只要他沒有被銷毀,你都可以通過你宣告的block調 用他。說到在類中宣告乙個bl...