美文网首页
iOS 之 block(4.5)

iOS 之 block(4.5)

作者: 老猫_2017 | 来源:发表于2020-01-14 14:11 被阅读0次

    现在总结一下,之前讨论的各种场景

    • 值类型 对本地变量,block 声明时,会内部有一个同名同类型的变量
    • 静态局部变量,block 声明时,产生的时一个类型指针,指向静态变量,初始化是进行赋值操作
    • reference type 引用类型,如 NSObject, block 被block 捕获时
      • NSObject,block 捕获时,引用计数+1
      • block 捕获时
        • 在栈上,copy 到堆上,引用计数+1
        • 在堆上,引用计数+1
    • 引用类型在释放时
      • NSObject 引用计数 -1, = 0 时,释放内存
      • block 引用计数 -1, 释放block 内存

    __block 修饰任意类型,都会生成 Block_byref 的结构体,如果修饰的是 对象, block,内部有 copy, dispose help,否则,没有。

    __weak 只能 修饰 block, NSObject 类型的对象,在构建结构体时,与 没有 weak 修饰的没有什么不同,只是属性标示 __weak, 其他的时一样的。

    在 block 进行 copy 操作时,如果 有 Block_byref, NSObject, Block,则会进行内部copy

    • Block_byref copy forwarding
      block copy
    • block forwarding

    NSObject 的操作 与 普通的 对象无区别,block 内部 会调用,+1, -1 操作

    block 操作,会调用,相应的辅助函数 来完成 copy, dispose

    byref 会调用相应的辅助函数来完成操作

    相关文章

      网友评论

          本文标题:iOS 之 block(4.5)

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