Block原理

作者: 钎探穗 | 来源:发表于2020-08-04 15:46 被阅读0次

    block是一个对象,可以捕获外部变量,是一个匿名函数,可以保存代码块。使用copy进行修饰,因为一开始处于静态区,当调用外部变量的时候,处于栈区,因为栈区的内容随时可能被销毁,通过copy进入堆区进行操作。block需要调用才能执行,因为funcptr保存当前代码块中的函数,需要通过funcptr方法调用,才能进行操作。因此block需要调用才能响应。

    block根据内存分为3类:

    1. NSGlobalBlock,在全局静态区。
    2. NSMallocBlock :处于堆区,有外部变量引入。
    3. NSStackBlock:处于栈区。

    Block在使用中对于循环引用问题的解决方案:

    • weak,strong操作
    • 在外部定义一个三方变量a(self->block->a->self)用__block修饰,在block内调用完毕后,将a=nil,以次来打破循环。
      __block修饰的变量,捕获到自己属性里,即声明定义一个临时变量,对应的是一个结构体,此结构体存放的是原有变量的值和地址,调用执行后,输出的其实是这个临时变量指针对应的内容。值会随着原有变量的变化而变化。
    • 通过block传参形式进行操作。

    相关文章

      网友评论

        本文标题:Block原理

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