1.block循环引用
一般循环引用会出现是因为:把代码块所在的类声明成所在类的一个属性;然后在Block里面用到了所在类的其他属性因而循环引用;
举个例子:
有一个类:EOCObject (网络请求类)
-(void)startWith:(EocNetWorkBlock)block;(请求方法)
在ViewController里面
{
EOCObject *_netWork;
NSData *getData;
}
-(void)downloadData{
_netWork=[EOCObject alloc ]init];
[_netWork startWith:^(NSData *data){
getData=data;//这里会造成循环引用(因为_netWork是self的属性,getData也是所以会造成循环引用)
}];
}
解决方案
1.在上述的代码中在EOCObject类里面把请求完成后的block传值的方法传值完后把块=nil。
2.网络请求类改成类方法:+(void)startWith:(EocNetWorkBlock)block;这样就不会造成循环引用了。