runtime相关问题
+(void)load; +(void)initialize;有什么用处?
在Objective-C中,runtime会自动调用每个类的两个方法。+load会在类初始加载时调用,+initialize会在第一次调用类的类方法或实例方法之前被调用。这两个方法是可选的,且只有在实现了它们时才会被调用。
共同点:两个方法都只会被调用一次。
调用时间
- initialize()方法的调用是在一个类或者其子类的在发送第一个消息之前,
- +(void)load 这个方法调用较早,当类加载的时候该方法就会被调用。
- 父类(Superclass)的方法优先于子类(Subclass)的方法,类中的方法优先于类别(Category)中的方法。
为什么其他语言里叫函数调用, objective c里则是给对象发消息(或者谈下对runtime的理解)
消息转发机制 消息转发机制
什么是method swizzling?
是一种动态修改方法的实现,从而达到修改类行为的目的,其他知道的还有分类(Category)也能达到这个目的。