美文网首页
Block相关

Block相关

作者: VinZZZZ | 来源:发表于2019-01-28 16:40 被阅读4次

    Block

    一:结构相关
    Block是一个包含了上下文变量的对象,该对象包含了_block_impl结构体,上下文变量同类型的成员变量(block函数体内用到的,加上了 _block修饰符),以及一个Desc结构体(可不关注)。在定义block时,调用了该对象的构造函数, __block_impl 中的isa指针标明其为一个对象,(值可为 NSGlobalBlock, NSStackBlock, NSMallocBlock中的一种),block函数体被封装成一个函数,并由__block_imp->FuncPtr所指向,上下文变量也作为参数传入构造函数。

    二:内存相关

    1. MRC下,若block函数体中包含了上下文变量,默认创建的是stack类型的block,因此需要用copy将其拷贝到堆上(构造一个MallocBlock),放在因退栈而被释放;若无上下文变量,则为GlocalBlock.
    2. ARC下, 默认创建的MallocBlock,因此无需copy修饰, strong即可。

    参考:
    https://blog.csdn.net/abc649395594/article/details/47086751
    https://blog.csdn.net/Deft_MKJing/article/details/78582933

    https://www.jianshu.com/p/b74598269140

    相关文章

      网友评论

          本文标题:Block相关

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