Block(互相持有) 内Strong强引用 释放

2017-03-28  本文已影响45人  ZCY_YAM

Block 作为块语法 使用 __weak __strong

  想必 在block 外使用weak 大家都明白,
  最近使用的时候在内部strong  发现 block 持有对象 这样又出现相互持有的鬼东西
  最后发现自己错
  原来是作用域自己没理解
  #define LRWeak(type) __weak typeof(type) weak##type = type;
  #define LRStrong(type) __strong typeof(type) type = weak##type;

LRShop * shop = [[LRShop alloc]init];
    shop.string = @"xxxxxx4444";
    LRWeak(shop)
    shop.myBlock = ^{
        LRStrong(shop)
//        NSLog(@"%@",shop.string);
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                    NSLog(@"%@",shop.string);
        });
    };

block 内部的strong 是一个局部变量(shop  PS 只是和外部对象名字一样罢了) 
当block 执行完了就会释放持有对象

上一篇下一篇

猜你喜欢

热点阅读