面试记录(基本上都会问的点)
__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检测,因为多线程在弱引用weakSel
f对强引用strongSelf
赋值时,弱引用weakSelf
可能已经为nil了
4.强引用strongSelf
在block作用域结束之后,自动释放
在 doSomething 中,weakSelf
不会变成 nil,不过在 doSomething 执行完成,调用第二个方法 doOtherThing 的时候,weakSelf
有可能被释放,于是,strongSelf
就派上用场了
网友评论