IOS开发知识点

OC-简单粗暴理解Block的本质

2018-08-24  本文已影响221人  li_礼光

block简单粗暴的理解

OC的block最终继承的类型是  : NSBlock类型,有三种类型(数据段,栈,堆)

Block的类                  副本源的配置存储域      复制效果        环境
__NSConcreteStackBlock     栈                   从栈复制到堆    访问了auto变量
__NSConcreteGlobalBlock    程序的数据区域         什么都不做      没有访问auto变量
__NSConcreteMallocBlock    堆                   引用计数增加    __NSConcreteStackBlock调用了copy
MRC的建议写法 : copy
ARC的建议写法 : strong修饰和copy修饰都可以,偏向于copy,统一MRC的写法

OC的block的 __block本质细节,在底层转生成一个__block_byref_xxx的指向结构体的指针.
这个新生成的结构体会保存block中的值,当调用这个block的时候,又会从这个新生成的结构体中取值

新的考虑点1 : 这里会是在runtime运行时的时候创建新的结构体对象,会对性能有一定的消耗.
新的考虑点2 : 针对考虑点1,在block中注意使用的是成员变量还是使用对象指针调用.从而考虑到要不要用block去修饰.如果是使用成员变量去修改它的值,那么就需要用__block去修饰.如果用的是对象指针,调用方法的方式,那么就不需要使用__block修饰

上一篇下一篇

猜你喜欢

热点阅读