Objective-C 中的 Category 就是对设计模式中装饰模式的一种具体实现。它的主要做用是在不改变原有类的前提下,动态地给这个类添加一些方法。html
根据苹果官方文档对 Category 的描述,它的使用场景主要有三个:ios
源代码略objective-c
思想:分类是在运行时决议的。设计模式
在这里分了两种状况进行处理:Category 中的实例方法和属性被整合到主类中;而类方法则被整合到元类中。另外,对协议的处理比较特殊,Category 中的协议被同时整合到了主类和元类中。app
注意:ui
主类中的方法和 Category 中的方法在 runtime 看来并无区别,它们是被同等对待的,都保存在主类的方法列表中。不过,类的方法列表字段有一点特殊,这里不打算详细描述,设计
能够思考下+load()方法的执行顺序为何是 父类->子类->分类指针
提示:htm
runtime 对 Category 中方法的处理过程并无对 +load 方法进行什么特殊地处理。所以,严格意义上讲 Category 中的 +load 方法跟普通方法同样也会对主类中的 +load 方法形成覆盖,只不过 runtime 在自动调用主类和 Category 中的 +load 方法时是直接使用各自方法的指针进行调用的。因此才会使咱们以为主类和 Category 中的 +load 方法好像互不影响同样。所以,当咱们手动给主类发送 +load 消息时,调用的一直会是分类中的 +load 方法,blog
Reference: