Block循环引用问题

先介绍一下Block声明:大概是来自己国外的某位牛人写的吧Block声明

Block循环引用:

Block的循环引用是说self持有block,而同时Block持有self。


ViewController.h

typedef void (^executeFinishedBlock)(void);

typedef void (^executeFinishedBlockParam)(ViewController *demo);

@interface ViewController : UIViewController

{

executeFinishedBlock finishblock;

executeFinishedBlockParam finishblockparam;

}

ViewController.m

ViewController *demo = [[ViewController alloc] init];

[demo setFinishedBlock:^{

if (weakDemo.resultCode == 200) {

NSLog(@"call back ok.");

}

}];

在.h文件中,ViewController持有finishBlock,在.m文件中,finishBlock里面又持有self

所以陷入循环引用,demo无法从内存中消失,内存循环。(block持有self导致retain计数+1)

解决方法:

__weak typeof(ViewController) *weakDemo = demo;

block里面的self一律用weakSelf代替

一般的局部block大胆使用self!

另外还有Block访问局部变量的问题:

Block可以访问局部变量Index,回调的时候不用回调当前的cell的indexPath,直接使用局部变量index即可,但是如果想要修改局部变量,需要把变量设置成__block。

注:以上代码来源于某位网友,如侵删。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容