一、Block的使用
我一般都是声明为一个属性来使用
typedef void(^CallBackBlock)(NSString *taskIdentifier);
@property (nonatomic, copy) CallBackBlock block;//需要拷贝到栈中
//使用
if (self.block) {
self.block = ^(NSString *taskIdentifier) {
//doSomething
};
}
self.block();
二、避免循环引用
1、如果我们需要在block的方法体内使用self,我们一般都要重新建一个weakSelf来弱引用当前的self,为了避免self被提前释放,我们一般都需要在block的方法体内在定义一个strongSelf,strongSelf其实是一个局部变量,它的生命周期是在block的方法体结束后销毁,所以起到一种保证在block执行完之前,self不会被回收的效果,使得代码的稳定性提高,当block结束后,self也会被回收,不会造成循环引用。
if (self.block) {
__weak __typeof__(self) weakSelf = self;
self.block = ^(NSString *taskIdentifier) {
__strong __typeof__(weakSelf) strongSelf = weakSelf;
weakSelf.identifier = @"123";
};
}