__weak typeof(self) wSelf = self;
// @weakify(self); // 需要引入yykit或者rac等第三方
self.testBlock = ^{
// @strongify(self); // 需要引入yykit或者rac等第三方
__strong typeof(wSelf) wStrongSelf = wSelf;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"11111---%@",wStrongSelf); // 这里的wStrongSelf相当于引用计数+1了,等这个延时方法执行后-1,也类似于逃逸闭包,延时执行的时候,保证self不被释放
});
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"2222---%@",wSelf); // 没用wStrongSelf的话,就可能会释放,比如pop到上个页面的时候,self就销毁了(由于没用wStrongSelf,所以类似于非逃逸闭包,不保证延时执行的时候self还在。如果页面提前pop出去了,就会导致self为空)
});
[wStrongSelf.navigationController popViewControllerAnimated:YES];
};
self.testBlock();
最终调用结果为:
2023-02-09 18:55:39.000243+0800 XMUI_OC[67864:3943453] 11111---<DemoToastVC: 0x7f835f50f280>
2023-02-09 18:55:39.000655+0800 XMUI_OC[67864:3943453] dealloc方法:页面销毁了
2023-02-09 18:55:40.959635+0800 XMUI_OC[67864:3943453] 2222---(null)
网友评论