困惑我很久的一个问题,直接上Demo代码
@interface Person : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSInteger age;
+ (void)run;
- (void)walk;
@end
实例化
Person *p = [[Person alloc]init];
NSLog(@"%@-%@-%@", object_getClass(p),object_getClass([p class]),object_getClass([Person class]));
打印的结果是:Person-Person-Person 。
也许是我的理解不够深,一开始我是懵逼的,但是如果结合如下runtime代码来理解呢:
1、object_getClass(id)
请记住参数id是一个对象,它返回的是这个id的isa指针所指向的Class,如果传参是Class,则返回该Class的metaClass。
2、类对象的结构体
struct objc_class {
Class _Nonnull isa ;
Class _Nullable super_class
const char * _Nonnull name
long version
long info
long instance_size
struct objc_ivar_list * _Nullable ivars
struct objc_method_list * _Nonnull methodLists
struct objc_cache * _Nonnull cache
struct objc_protocol_list * _Nullable protocols
}
总结
p 是 Person 的实例对象:
Class pClass = [p class] = [Person class];
pClass自身也是一个对象,