面试题

作者: 哥只是个菜鸟 | 来源:发表于2020-07-28 14:45 被阅读0次

    面试题

    面试记录(基本上都会问的点)

    __weak typeof(self) wself = self;
    obj2.block: ^ (void) {
      if (wself) { // 要判断self是否存在,存在才能执行它的方法
        [wself doSomething];
        // ... n秒后
        [wself doOtherthing];
      }
    

    2.多次调用 wself,必须加__strong

    __weak typeof(self) wself = self;
    obj2.block: ^ (void) {
      __strong typeof(wself) sself = wself; 
      if (sself) { // 要判断self是否存在,存在才能执行它的方法
        [sself doSomething];
        // ... n秒后
        [sself doOtherthing];
      }
    }
    

    1.在block之前定义对self的弱引用 weakSelf,因为是弱引用,所以self被释放时weakSelf会变成nil
    2.在block中引用该弱引用,考虑到多线程情况,通过强引用strongSelf来引用该弱引用,如果self不为nil,就会retain self,以防在block内部使用过程中self被释放
    3.在block块中使用该强引用strongSelf,注意对strongSelf进行nil检测,因为多线程在弱引用weakSelf对强引用strongSelf赋值时,弱引用weakSelf可能已经为nil了
    4.强引用strongSelf在block作用域结束之后,自动释放

    在 doSomething 中,weakSelf 不会变成 nil,不过在 doSomething 执行完成,调用第二个方法 doOtherThing 的时候,weakSelf 有可能被释放,于是,strongSelf 就派上用场了

    相关文章

      网友评论

          本文标题:面试题

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