不知道什么時候開始洛姑,寫代碼只要有block就在block里面寫如下代碼:
__weak __typeof(self) weakSelf = self;
[self dismissViewControllerAnimated:YES completion:^{
__strong __typeof(weakSelf) strongSelf = weakSelf;
[strongSelf cancelSafeDeviceBinding];
}];
首先解釋一下凰荚,為什么外面使用weakSelf霹期?
如果self持有block敢课,block里也持有self,這樣就會造成循環(huán)引用糙俗,所以我們使用weakSelf勒奇。
為什么block里面又使用strongSelf?
訪問self的時候我們使用一個臨時的強指針來訪問self巧骚,這樣在整個block執(zhí)行期間赊颠,可以保證self對象不會被銷毀,同時劈彪,block調(diào)用完后竣蹦,臨時的強指針被銷毀,一切又回歸原來的樣子沧奴。這樣既能保證整個block執(zhí)行期間痘括,self對象不會被銷毀,又能保證不會產(chǎn)生循環(huán)引用滔吠。
但是上面的代碼远寸,雖然block里面引用了self,但是self并沒有引用block屠凶,所以上面的代碼沒有循環(huán)引用,沒必要使用weakSelf肆资,正確寫法如下:
[self dismissViewControllerAnimated:YES completion:^{
[self cancelSafeDeviceBinding];
}];
關(guān)于block的循環(huán)引用矗愧,具體可參考:http://www.reibang.com/p/5be4b1ca58dd