• 关于Block内部要不要使用weakSelf的几种情况


     

    本文转载自http://www.jianshu.com/p/c6ca540861d9

    关于Block内部要不要使用weakSelf的几种情况

    我们知道当对block使用不当时会造成循环引用导致内存泄露,这里列出几种使用block到底会不会引起循环引用的例子,通过重写控制器dealloc,当控制器被pop看有没有调用来判断。

    • block是控制器的属性,如果block内部没有使用weakSelf将会造成内存泄露
      self.testBlock = ^()
        {
            NSLog(@"%@",self.mapView);
        };
        self.testBlock();
    • 把block内部抽出一个作为self的方法,当使用weakSelf调用这个方法,并且这个方法里有self的属性,block不会造成内存泄露
        self.testBlock = ^()
        {
            [weakSelf test];
        };
    -(void)test
    {
        NSLog(@"%@",self.mapView);
    }
    • 当block不是self的属性时,block内部使用self也不会造成内存泄露
        TestBlock testBlock = ^()
        {
            NSLog(@"%@",self.mapView);
        };
      [self test:testBlock];
    • 当使用类方法有block作为参数使用时,block内部使用self也不会造成内存泄露

        [WDNetwork testBlock:^(id responsObject) {
      
            NSLog(@"%@",self.mapView);
        }];

    以上几个是我通过控制器pop时,通过有没有走dealloc方法测出来的。

  • 相关阅读:
    一些Cassandra+YCSB异常
    memcached使用
    YCSB报": No such file or directory"异常
    dynamo与cassandra区别
    XT535
    北京地区护照办理流程
    一些iptables配置
    debian6保存iptables规则
    pdf转eps后存在大片空白的处理
    sql server 2008 数据库可疑的解决步骤
  • 原文地址:https://www.cnblogs.com/shycie/p/6142332.html
Copyright © 2020-2023  润新知