感谢wildfireli对block的讲解。传送门
Block的循环引用:
简单的说,一个对象引用了block,而在block中又使用了该对象,那么就会发生循环引用。
@property (nonatomic, copy)completionBlock completion;
@property (nonatomic, assign)BOOL success;
/*****************/
self.completion = ^(){
if (!self.success) {
NSLog(@"哈哈");
}
};
self对象拥有一个completion的block属性,而在block中又使用了self对象,所以在这里会引起循环引用。
在ARC中,修改如下:
@property (nonatomic, copy)completionBlock completion;
@property (nonatomic, assign)BOOL success;
/**********************/
__weak typeof(self)weakSelf = self;
self.completion = ^(){
if (!weakSelf.success) {
NSLog(@"哈哈");
}
};
在MRC中,将__weak 改成__block即可。