runtime相关问题

+(void)load; +(void)initialize;有什么用处?

在Objective-C中,runtime会自动调用每个类的两个方法。+load会在类初始加载时调用,+initialize会在第一次调用类的类方法或实例方法之前被调用。这两个方法是可选的,且只有在实现了它们时才会被调用。
共同点:两个方法都只会被调用一次。

调用时间

  • initialize()方法的调用是在一个类或者其子类的在发送第一个消息之前,
  • +(void)load 这个方法调用较早,当类加载的时候该方法就会被调用。
  • 父类(Superclass)的方法优先于子类(Subclass)的方法,类中的方法优先于类别(Category)中的方法。

为什么其他语言里叫函数调用, objective c里则是给对象发消息(或者谈下对runtime的理解)

消息转发机制 消息转发机制


什么是method swizzling?

是一种动态修改方法的实现,从而达到修改类行为的目的,其他知道的还有分类(Category)也能达到这个目的。

Objective-C的hook方案(一): Method Swizzling

原文地址:https://www.cnblogs.com/sunyanyan/p/5300876.html