1.Category的实现原理,以及Category为什么只能加方法不能加属性?
分类的实现原理是将Category中的方法,属性,协议数据放在category_t结构体中,然后将结构体内的方法列表拷贝到类对象的方法列表中。
Category可以添加属性,但是并不会自动生成成员变量及set get方法。因为category_t结构体中并不存在成员变量。
通过之前对对象的分析我们知道成员变量是存放在实例对象中的,并且编译的那一刻就已经决定好了。而分类是在运行时才去加载的。那么我们就无法再程序运行时将分类的成员变量中添加到实例对象的结构体中。因此分类中不可以添加成员变量。
2.Category和Extension的区别是什么?
和分类Categroy不同的是:类扩展的信息是在编译的时候已经合并在了类对象中,而分类是在运行时合并至原类中的。
3.先调用所有原类的laod方法
按照编译顺序调用(可以手动设置编译顺序)
调用子类的load之前会先调用父类的load方法
再调用分类的laod方法
4.按照编译顺序调用(可以手动设置编译顺序)
5.Category中有load方法吗?load方法是什么时候调用的?load 方法能继承吗?
Category中有load方法,load方法在程序加载了类和分类的时候就会调用,在main函数之前调用。load方法可以继承。调用子类的load方法之前,会先调用父类的load方法。一般我们不会手动去调用load方法,而是让系统去调用。
如果非要手动调用load方法,那么就会按照消息发送机制通过isa指针来寻找方法。