__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) {
__strong __typeof(weakSelf)strongSelf = weakSelf;
strongSelf.networkReachabilityStatus = status;
if (strongSelf.networkReachabilityStatusBlock) {
strongSelf.networkReachabilityStatusBlock(status);
}
};
新聞熱點
疑難解答