Block 的使用及如何避免循环引用

一、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";
    };
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 大L认识她,已经快有五年了,五年前QQ刚有了点赞功能、五年前,大L才高二。两个无聊的人,或许因为夏天快要结束...
    没有勇气的流浪者阅读 1,508评论 0 0
  • 据说肿瘤的发展要依靠葡萄糖,低血糖可以抑制肿瘤的发展,那么临床上见到的血糖现象可不可以抑制肿瘤的发展可不可以一直主流。
    秦健勇阅读 1,794评论 0 0