美文网首页
block的循环问题 - 草稿

block的循环问题 - 草稿

作者: __Seven | 来源:发表于2017-05-13 08:34 被阅读10次

    在iOS8以后开发使用较多的block,但是在使用block的时候,有时不小心,会造成循环引用,所以一般我们在使用block的时候会这样做
    __weak type(self)weakSelf =self;
    在block中都使用weakSelf来代替self。

     - (void)Block {
    __weak typeof(self) weakSelf = self;
    self.block = ^{
        [weakSelf doSomething];
    };
    

    }
    总结
    在block不是作为一个property的时候,可以在block里面直接使用self,比如UIView的animation动画block。

    当block被声明为一个property的时候,需要在block里面使用weakSelf,来解决循环引用的问题。下面看个有意思的代码

           - (void)testMethod { 
    
            int anInteger = 10;
    
             void (^testBlock)(void) = ^{
    
          NSLog(@"Integer is : %i", anInteger);
    
    };
    anInteger = 11;
    
    testBlock();}
    

    输出的是10而不是11.在block内把anIteger私有化了!外部不能修改了,
    在看
    - (void)testMethod {
    __block int anInteger = 42;

                  void (^testBlock)(void) = ^{
                       NSLog(@"Integer is : %i", anInteger);
                  };
    
                  anInteger = 50;
    
                      testBlock();
                   }
    

    加上--block修饰就可以允许外部对block内指的改变。
    本文有参考其他!

    相关文章

      网友评论

          本文标题:block的循环问题 - 草稿

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