区别:
-
self
在实例方法中是对象的首地址;在类方法中是Class
类 - 类方法存储在
元类对象的方法列表中
;实例方法存储在类对象的方法列表中
代码:
CFPerson *person = [[CFPerson alloc]init];
[person eating];//实例方法调用
[CFPerson sleeping];//类方法调用
经过编译器转换变为:
((void(*)(id,SEL))(void*)objc_msgSend((id)person,sel_registerName("eating"));
((void(*)(id,SEL))(void*)objc_msgSend(objc_getClass("CFPerson"),sel_registerName("sleeping"));
-
objc_msgSend
是通过汇编实现的
实验一:实例对象调用类方法
[person performSelector:@selector(sleeping)];
实验二:类对象调用实例方法
[CFPerson performSelector:@selector(eating)];
- 以上俩种调用都会崩溃
网友评论