Block的循环引用

#warning如果block(block只要是copy的就会在堆中)在堆中, block引用外界的对象,会导致循环引用

//    __weak IWCommonArrowItem *weakClearCache = clearCache;

//    __weak IWGeneralViewController *weakSelf = self;

// typeof可以获取括号中传递的值的真实类型

//    typeof(10) a = 10; == int a = 10;

//    __weak typeof(clearCache) weakClearCache = clearCache;

//    __weak typeof(self) weakSelf = self;

//如果是用__weak修饰,当对象销毁之后会自动将变量的值设置为nil

//而如果__unsafe_unretained不会

__unsafe_unretainedtypeof(clearCache) weakClearCache = clearCache;

__unsafe_unretainedtypeof(self) weakSelf =self;

/**

如何在开发中,避免block出现循环引用呢

1>每次碰到self的时候,要小心,需要思考一下

2>充分利用dealloc方法

3

解决方法:

__weak CZViewController *weakSelf = self;

*/

//为了保证代码的安全性,苹果在设计block的时候

// block引用外部变量时,默认会做copy操作,copy本身也会做一次强引用

//在现在的代码中,如果block中有对self的强引用,出现循环引用的情况

//解决方法,在oc中,对象默认都是强引用,__weak可以变成弱引用

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

推荐阅读更多精彩内容