iOS之扩展和代理

扩展

Q:我们一般用扩展做什么?

A:声明私有属性,声明私有方法(没什么意义),声明私有成员变量

Q:扩展的特点

A:编译时决议,只能以声明的形式存在,多数情况下寄生在宿主类的.m中,不能为系统类添加扩展。


扩展

注意:类扩展得到的属性和方法,都是私有的!在外界中无法直接使用,即无法直接get后者set到这些成员。但是可以在.h里提供方法接口来改变这些私有属性的情况。

代理

代理是一种设计模式,以@protocol形式体现,一般是一对一传递。一般以weak关键词以规避循环引用。

Q:代理的组成?

A:代理对象、委托者、协议三部分组成。

    协议:用来指定代理双方可以做什么,必须做什么。

    代理:根据指定的协议,完成委托方需要实现的功能。

    委托:根据指定的协议,指定代理去完成什么功能。

Q:为什么我们设置代理属性都使用weak呢?

A:我们定义的指针默认都是__strong类型的,而属性本质上也是一个成员变量和set、get方法构成的,strong类型的指针会造成强引用,必定会影响一个对象的生命周期,这也就会形成循环引用。

你可能感兴趣的:(iOS之扩展和代理)