分类和扩展

一般用分类做什么?

1,声明私有方法

2,分解体积庞大的类文件

3,把framework的私有方法公开

分类的特点

1,运行时决议

2,可以为系统类添加分类(UIview 获取坐标的方法)

分类中都可以添加哪些内容

1,实例方法

2,类方法

3,协议

4,属性(分类当中定义了1个属性,实际上只声明了对应的set get方法,并没有为我们在分类中添加实例变量(通过关联对象为分类添加实例变量))

总结

1,分类添加的方法可以“覆盖”原类方法

2,同名分类方法谁能生效取决于编译顺序

3,名字相同的分类会引起编译报错


能否给分类添加“成员变量”?

能,通过关联对象为分类添加实例变量

关联对象的本质

objc_getAssociatedObject,  remove,


我们添加两个分类,分别为A和B,两个分类当中都有1个同名的方法,那个方法才会最终会生效?实际上取决于分类的编译顺序,最后编译的那个分类当中的同名方法才会最终生效,之前的会被覆盖掉(最后编译的分类的当中方法会最早生效)。

一般用扩展做什么?

1,声明私有属性(不对子类暴露) 2 声明私有方法  3声明私有成员变量

扩展的特点 以及分类的区别

1,编译时决议   (分类是运行时决议)

2,只以声明的形式存在,没有具体实现,多数情况下寄生于宿主类的.m中

(分类可以有声明,也可以有实现)

3,不能为系统类添加扩展(可以为系统类添加分类)

你可能感兴趣的:(分类和扩展)