面试题

2020-07-28  本文已影响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 就派上用场了

上一篇 下一篇

猜你喜欢

热点阅读