Block的循环引用

2016-07-03  本文已影响0人  143db5b5572a

#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可以变成弱引用

上一篇下一篇

猜你喜欢

热点阅读