//联系人:石虎QQ: 1224614774昵称:嗡嘛呢叭咪哄
一、避免循环引用
如果【block内部】使用【外部声明的强引用】访问【对象A】,那么【block内部】会自动产生一个【强引用】指向【对象A】
如果【block内部】使用【外部声明的弱引用】访问【对象A】,那么【block内部】会自动产生一个【弱引用】指向【对象A】
__weak typeof(self)weakSelf = self;
dispatch_block_t block = ^{
[weakSelf doSomething];// weakSelf != nil
// preemption,weakSelf turned nil
[weakSelf doSomethingElse];// weakSelf == nil
};
二、最好这样调用:
__weak typeof(self)weakSelf = self;
myObj.myBlock = ^{
__strong typeof(self)strongSelf = weakSelf;
if(strongSelf){
[strongSelf doSomething];// strongSelf != nil
// preemption,strongSelf still not nil(抢占的时候,strongSelf还是非nil的)
[strongSelf doSomethingElse];// strongSelf != nil }
else { // Probably nothing... return;
}
};