美文网首页
OC中__weak和__strong、@weakify、@str

OC中__weak和__strong、@weakify、@str

作者: 小明2021 | 来源:发表于2023-02-08 18:57 被阅读0次
     __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)

    相关文章

      网友评论

          本文标题:OC中__weak和__strong、@weakify、@str

          本文链接:https://www.haomeiwen.com/subject/glnqkdtx.html