方法调用在运行时的过程html
若是用实例对象调用实例方法,会到实例的isa指针指向的对象(也就是类对象)操做。ios
若是调用的是类方法,就会到类对象的isa指针指向的对象(也就是元类对象)中操做。缓存
首先,在相应操做的对象中的缓存方法列表中找调用的方法,若是找到,转向相应实现并执行。指针
若是没找到,在相应操做的对象中的方法列表中找调用的方法,若是找到,转向相应实现执行htm
若是没找到,去父类指针所指向的对象中执行1,2.对象
以此类推,若是一直到根类还没找到,转向拦截调用。编译器
若是没有重写拦截调用的方法,程序报错。io
以上的过程给我带来的启发:编译
重写父类的方法,并无覆盖掉父类的方法,只是在当前类对象中找到了这个方法后就不会再去父类中找了。class
若是想调用已经重写过的方法的父类的实现,只需使用super这个编译器标识,它会在运行时跳过在当前的类对象中寻找方法的过程。
来源:http://www.cocoachina.com/ios/20150901/13173.html