objc_object
id = objc_object [ isa、弱引用、关联对象、内存管理]
objc_class
class = objc_class [class superClass 、cache_t cache(方法缓存) 、class_data_bits_t bits]
isa 指针
64位
指针型 、非指针型
cache_t【用于快速查找方法执行函数、是可增量扩展的哈希表结构、是局部性原理的最佳应用】
class_data_bits_t
[对class_rw_t 封装 、
class_rw_t 代表了相关读写信息、对class_to_t的封装
class_to_t 类的相关只读信息]
class_rw_t [
class_to_t
protocols 二维数组
properties 二维数组
methods 二维数组
]
class_to_t[
name (类名)
ivars (类的成员变量)
properties 一维数组
protocols 一维数组
methodList 一维数组
]
method_t
函数四要素 :
名称、 sel name
返回值、 const char* types
参数、
函数体 imp
Type Encodings
const char* types(返回值、参数1、参数2….参数n)
对象、类对象 、元类对象
类对象 存储实例方法列表等信息
元类对象 存储类方法列表等信息
isa 指向根元类对象
消息传递
void objc_msgSend
void objc_msgSendSuper
缓存中查找是 哈希查找
当前类方法中查找: 已排序好的 二分查找、未排序好的 一般遍历查找
父类逐级查找
消息转发机制
+(BOOL)resolveInstanceMethod:(SEL)sel {
//如果text方法 打印日志
if (sel == @selector(test)) {
NSLog(@"resolveInstanceMethod");
return NO;
}else {
//从父类的默认调用
return [super resolveInstanceMethod:sel];
}
}
- (id)forwardingTargetForSelector:(SEL)aSelector {
NSLog(@"forwardingTargetForSelector");
return nil;
}
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector {
if (aSelector == @selector(test)) {
NSLog(@"methodSignatureForSelector:");
//v代表是void类型 @代表第一个参数类型是id ,即self
//:代表第二参数是SEL类型的 即@selector(test)
return [NSMethodSignature signatureWithObjCTypes:"v@:"];
}else {
return [super methodSignatureForSelector:aSelector];
}
}
- (void)forwardInvocation:(NSInvocation *)anInvocation {
NSLog(@"forwardInvocation:");
}