9 传值的方式:block

block有三种,NSConcreteGlobal,NSConcreteStack,NSConcreteMalloc

1好处:代码紧凑,方便阅读和维护,传值、回调方便,省去很多代理方法(代理模式通过协议 预先定义好代理的行为,从设计模式来说 更加严谨)

2注意事项:

block不能修改外部的局部变量,因为外部局部变量复制到blocck内部,是以const形式复制的。如果要修改,需要在外部的局部变量前加__block,作用就是使外部的局部变量可以进行修改

当block引用外部变量的时候,会对栈区变量进行一次拷贝 到堆区,在block内部操作的是拷贝之后的副本,对外部变量真实的值不会造成影响,

字符串本身就在堆区

3不同的block在内存中的保存位置,

不引用外部的局部变量,保存在全局区

引用外部的局部变量,在ARC下,保存在堆区,MRC下,保存在栈区,因此在定义block属4性的时候,使用copy关键词,将block从栈区复制到堆区,兼顾了MRC

4block循环引用:

使用__weak修饰符,定义一个弱引用

把self临时定义为弱引用 __weak typeof(self) weakSelf = self;

__strong typeof(weakself) strongSelf = weakself;

在block内部不要使用 _成员变量,成员变量默认是由控制器引起的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容