self.qStr=@"你好,老铁";
// Do any additional setup after loading the view, typically from a nib.
//当使用局部变量时,需要添加__block
__blockintnum =100;
self.tBlock= ^(intn){
num = num + n;
NSLog(@"%d",num);
};
self.tBlock(100);
// 当使用全局变量时,需要时使用__weak typeof(self)weakSelf = self修饰,否则会造成循环引用
__weak typeof(self)weakSelf = self;
weakSelf.qBlock= ^(NSString*str) {
_qStr= [NSStringstringWithFormat:@"%@%@",_qStr,str];
NSLog(@"%@",_qStr);
};
self.qBlock(@"hahahahahha");
// 这样循环问题是解决了,但是又会导致一个新的问题,假如在block有一个耗时操作,在这个过程self被销毁了,而weakself也会随着self的销毁而销毁,block又要对weakself进行某些操作,这是拿到的weakself就是nil了。
__weak __typeof(self) weakself = self;
self.qBlock= ^(NSString*str) {
__strong__typeof(self) strongself = weakself;
strongself.qStr=@"aa";
};
//执行bock时,即使self被销毁,我们还有self的一份拷贝(我自己的理解)
// 静态局部变量 是可以改变的
staticintnum =100;
self.sBlock= ^int(intn) {
num = num +n;
NSLog(@"%d",num);
returnnum;
};
self.sBlock(200);
// 静态全局变量可以改变
self.sBlock= ^int(intn) {
number=number+n;
NSLog(@"%d",number);
returnnumber;
};
self.sBlock(200);
//因为静态对象存在静态区(全局区)从创建到程序销毁一直存在,block内部没有声明对应的成员
网友评论