iOS 代碼規范~避免循環引用

//聯系人:石虎QQ: 1224614774昵稱:嗡嘛呢叭咪哄

一、避免循環引用

如果【block內部】使用【外部聲明的強引用】訪問【對象A】,那么【block內部】會自動產生一個【強引用】指向【對象A】

如果【block內部】使用【外部聲明的弱引用】訪問【對象A】,那么【block內部】會自動產生一個【弱引用】指向【對象A】

__weak typeof(self)weakSelf = self;

dispatch_block_t block = ^{

[weakSelf doSomething];// weakSelf != nil

// preemption,weakSelf turned nil

[weakSelf doSomethingElse];// weakSelf == nil

};

二、最好這樣調用:

__weak typeof(self)weakSelf = self;

myObj.myBlock = ^{

__strong typeof(self)strongSelf = weakSelf;

if(strongSelf){

[strongSelf doSomething];// strongSelf != nil

// preemption,strongSelf still not nil(搶占的時候,strongSelf還是非nil的)

[strongSelf doSomethingElse];// strongSelf != nil }

else { // Probably nothing... return;

}

};

謝謝!!!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容