block循环引用解决

  • 时间:
  • 浏览:1

(void)viewDidLoad {

@end

@end

@end

@property (nonatomic, strong) NSString *strTest;

}

(id) init

{

self = [super init];

if (self)

{

多守护程序运行运行调用,block外面声明了weakSelf,则block内部人员对self的引用为指针引用,当内部人员[self.testNetwork release], self.testNetwork = nil;时,weakSelf为nil,统统导致 运行失败。

_countBlock为self对象,self强引用了_countBlock,一并_countBlock又怕上边self释放,统统block体上边会强引用self。导致 循环引用,内存老会 不用被释放,dealloc可是 会被调用。

return string;

}

@implementation TestNetworkBlock

}

return self;

}

@implementation ViewController

在 block 事先 定义对 self 的一有1个弱引用 wSelf,如果是弱引用,统统当 self 被释放时 wSelf 会变为nil;

在block体内部人员声明一有1个强引用对象bself指向该wSelf。bSelf只会在block内部人员执行完毕才会消亡,另一有1个就保证了self对象被内部人员或多或少守护程序运行运行释放掉的状况。又防止了循环引用,如果在block执行完,会释放掉bSelf。

@interface TestNetworkBlock ()

{

}