Block 04 - 循环引用
在 ARC 环境下解决循环引用
-
使用 __weak、__unsafe_unretained:
__weak typeof(self) weakSelf = self; self.block = ^{ [weakSelf sayHello]; };
__unsafe_unretained typeof(self) weakSelf = self; self.block = ^{ [weakSelf sayHello]; };
-
使用 __block(不推荐):
__block typeof(self) weakSelf = self; self.block = ^{ [weakSelf sayHello]; weakSelf = nil; };
必须调用 Block,Block 内部必须将 weakSelf 置为 nil。
在 MRC 环境下解决循环引用
-
使用 __unsafe_unretained:
__unsafe_unretained typeof(self) weakSelf = self; self.block = ^{ [weakSelf sayHello]; };
-
使用 __block:
__block typeof(self) weakSelf = self; self.block = ^{ [weakSelf sayHello]; };
网友评论