定义私有变量示例代码
typedef void(^MyBlock)(void);
@interface BlockViewController ()
{
NSInteger _integer;
NSString *_string;
}
@property (nonatomic, copy) MyBlock myblock;
@end
实现部分代码:
_integer = 123;
_string = @"name";
//这种方式造成循环引用
self.myblock = ^() {
NSLog(@"%@",@(_integer));
};
//
//这种方式造成循环引用
self.myblock = ^() {
NSLog(@"%@",_string);
};
self.myblock();
上面的这种方式是会造成Block循环引用问题,原因是当前控制器对myblock是强引用,私有变量也是强引用,所以造成循环引用问题。这是我的理解
如果Block定义并不是当前控制器的属性的时候,并不会造成循环引用问题。如下面的代码:
MyBlock newBlock = ^() {
NSLog(@"%@",@(_integer));
};
MyBlock new2Block = ^() {
NSLog(@"%@",_string);
};
newBlock();
new2Block();
网友评论