美文网首页
iOS 关于block前缀的理解

iOS 关于block前缀的理解

作者: 福尔摩罗 | 来源:发表于2018-01-12 11:03 被阅读0次

    关于block:修饰符 用copy(要从堆区 拷贝到栈区)

    前缀修饰符:

    __block:默认情况下,block会把变量复制为自己私有的const变量,也就是说block会捕获栈上的变量,复制为自己的const变量,__block修饰符的作用就是,只要捕获到该变量被block持有,就将该变量在栈中的内存地址 放到堆中,此时 block内部还是外部,地址就一致,就可以随便改动了。

    __weak :
    (1)block 循环引用:
    @property (nonatomic, copy) void (^block)(void);
    
    当block 作为属性被强引用后,
    - (void)configureBlock {
        self.block = ^{
            [self doSomething];    
        };
    }
    

    在block内部又对self进行了强引用(方法调用),在这种情况下,由于其相互引用,内存不能够被释放,造成内存泄漏,为了解决循环引用,我们经常就通过声明一个weakSelf来解决,加入weakSelf后,block对self的强引用就变成了弱引用,这样在属性所指的对象遭到摧毁时,属性值也被清空,打破循环引用,

    相关文章

      网友评论

          本文标题:iOS 关于block前缀的理解

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