Block相关

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容