iOS开发OC-类别和类拓展iOS开发

Category分类和Extension类扩展的详解与区别

2016-03-28  本文已影响1602人  20b347b28fc9
category & extension

苹果推荐分类的使用

除此之外,我们还可以转换思想,将category使用到如下地方:

category和extension区别1

category和extension区别2

虽然有人说extension是一个特殊的category,也有人将extension叫做匿名分类,但是其实两者差别很大。

category底层结构

我们知道,所有OC类和对象,在runtime层都是用struct表示的,category在runtime层使用结构体category_t定义的,包含了如下:

category加载

在runtime,系统会将包含的内容添加如下:

分类加载和方法调用顺序

分类覆盖类的方法

如果分类中的方法与类的方法同名,则将会覆盖类的方法,实现原理:分类的对象方法会添加到类的方法列表中,分类的方法会添加到类的相应方法列表中(对象方法添加到类的方法列表,类方法会添加到metaclass列表),而且排列顺序会与原类的同名方法排在一起,且在原类的同名方法的前面。方法调用时会根据顺序先找到第一同名方法就调用,因此会覆盖原类的同名方法。

分类中添加成员属性

在runtime层面可以通过关联对象为分类添加成员属性

上一篇 下一篇

猜你喜欢

热点阅读