我有一個關於objc塊的問題。如果你想在塊中使用自己,你應該減弱它並在塊中再次強化它,這樣你就不會陷入保留週期。在我的情況下,我也想寫一個塊的存在類的屬性。現在我有點困惑,如果這是有道理的,如果我以後可以訪問此屬性,或者如果我完全失去對此屬性的引用。Objective-C塊的生命週期和保留週期
這裏是我的代碼示例:
所有的__weak typeof(self)weakSelf = self;
void (^handleRequestBlock)(NSURLSessionDataTask*, id) = ^(NSURLSessionDataTask *task, id responseObject)
{
__strong typeof(weakSelf)strongSelf = weakSelf;
if (strongSelf) {
strongSelf->_response = [strongSelf extractResponseData:responseObject forRequestType:requestType];
[strongSelf postSuccessNotification:strongSelf->_response];
}
};
首先使此代碼完全感覺或者是有什麼優化?
有人可能會再次解釋在objc內部發生了什麼。我現在閱讀了幾篇文章,而且我比以前更關心保留週期的困惑。據我所知,一個塊是一個對象,如果它捕獲變量,則變量被內部拷貝並默認聲明爲const,只要你不使用__block聲明(關於全局變量中的生命屬性呢?)。我仍然沒有完全弄清楚塊的生命週期是什麼,爲什麼指針可能會晃來晃去,因爲整個塊對象及其內容在完成時應該被釋放。如果有人有時間,我會欣賞一個書呆子和詳細的答案或鏈接到一個很好的閱讀資源! :)
在此先感謝:)
在我的代碼示例不會的我_original_自我參考伊娃_response得到函數的返回值,或者是分配到自我的原始實例的複製版本?仍嘗試獲取將對象複製/新創建的位置,並保留對原始對象的引用。 – slngr 2014-09-03 12:55:50
@slngr這個[link](http://www.galloway.me.uk/2012/10/a-look-inside-blocks-episode-1/)有幫助嗎? – KudoCC 2014-09-04 01:59:40
@slngr對不起,我不明白你的意思。你應該知道:在塊中使用'__weak'的變量將不會被髮送'retain'方法,你可以從我的例子2中推導出來。再一次,'__strong typeof(weakSelf)strongSelf'' strongSelf'只會在塊被調用時保留'self',而weakSelf'不是零。 – KudoCC 2014-09-04 02:39:00