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 执行完了就会释放持有对象
网友评论