美文网首页
iOS block进阶 内存管理

iOS block进阶 内存管理

作者: 福将的逆袭 | 来源:发表于2018-04-17 10:24 被阅读0次

    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内部没有声明对应的成员

相关文章

网友评论

      本文标题:iOS block进阶 内存管理

      本文链接:https://www.haomeiwen.com/subject/uzlukftx.html