iOS 代码规范~避免循环引用

//联系人:石虎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;

}

};

谢谢!!!

你可能感兴趣的:(iOS 代码规范~避免循环引用)