zoukankan      html  css  js  c++  java
  • 使用系统的某些block api(如UIView的block版本写动画时),是否也考虑循环引用问题?

    • 系统的某些block api中,UIView的block版本写动画时不需要考虑,但也有一些api 需要考虑
    • 以下这些使用方式不会引起循环引用的问题
    [UIView animateWithDuration:duration animations:^
    { [self.superview layoutIfNeeded]; }];
    
    [[NSOperationQueue mainQueue] addOperationWithBlock:^
    { self.someProperty = xyz; }];
    
    [[NSNotificationCenter defaultCenter] addObserverForName:@"someNotification"
                object:nil
                 queue:[NSOperationQueue mainQueue]
            usingBlock:^(NSNotification * notification)
            { self.someProperty = xyz; }];
    
    • 但如果方法中的一些参数是 成员变量,那么可以造成循环引用,如 GCD 、NSNotificationCenter调用就要小心一点,比如 GCD 内部如果引用了 self,而且 GCD 的参数是 成员变量,则要考虑到循环引用,举例如下:

      • GCD

        • 分析:self-->_operationsQueue-->block-->self形成闭环,就造成了循环引用
          __weak __typeof__(self) weakSelf = self;
          dispatch_group_async(_operationsGroup, _operationsQueue, ^
          {
          [weakSelf doSomething];
          [weakSelf doSomethingElse];
          } );
          
      • NSNotificationCenter

        • 分析:self-->_observer-->block-->self形成闭环,就造成了循环引用
        __weak __typeof__(self) weakSelf = self;
        _observer = [[NSNotificationCenter defaultCenter]
        addObserverForName:@"testKey"
        object:nil
        queue:nil
        usingBlock:^(NSNotification *note){
            [weakSelf dismissModalViewControllerAnimated:YES];
        }];
  • 相关阅读:
    Hdu 5595 GTW likes math
    HNOI2002 营业额统计(Splay Tree)
    hdu 5592 BestCoder Round #65(树状数组)
    hdu 5591 BestCoder Round #65(博弈)
    hdu5586 BestCoder Round #64 (div.2)
    NoSQL
    什么是关系型数据库
    关系型数据库与NOSQL
    关系型数据库
    centos6.x下安装eclipse
  • 原文地址:https://www.cnblogs.com/huangzs/p/7516715.html
Copyright © 2011-2022 走看看