一种是走符号表 symbol 一种是走objc_msgSend的形式
1、tryGenerateSpecializedMessageSend
2、GenerateMessageSend
元类
metaClass
Class meta = objc_getMetaClass(className)
Method m1 = objc_getInstanceMethod(metaClass, @selector(sayHappy)); // 类方法在元类中是实例方法
Method m2 = class_getClassMethod(metaClass, @selector(sayHappy)); // 这里有值
// 类方法在在元类中也是类方法
// 元类的元类也是自己
这里是第一次还没有缓存方法
这里为什么没有alloc 和class这些缓存方法呢?
cache_fill_nolock:进行底层算法和扩容操作
这里old:4 new:8 调用reallocate进行重新
会把之前的清掉 setBucketsAndMask
cache_collect_free:把之前的缓存的值清掉
这里就是消除记忆: a、如果进行读写,不安全 b、速度要求非常快
因为_objc_msgSend是快速流程
LRU算法:最新最近原则