上面两种方法返回的都是类对象,[[NSObject class] class]返回的对象依然是类对象, 而不是元类对象 runtime方法:object_getClass 如上图所示, 这些方法返回的NSObject类对象都指向同一片内存空间 如果要获取元类对象, 只能用object_getClass, 然后把类对象作为参数传进去, 获取到的就是元类对象. 我们来看看Class...
1:Classobjc_getClass(constchat*aClassName)1>传入字符串类名2>返回对应的类对象2.Classobject_getClass(id obj)1>传入的obj可能是instance对象,class对象、meta-class对象2>返回值 a:如果是instance对象,返回class对象 b:如果是class对象,返回meta-class对象 c:如果是meta-class对象,返回NSObject(基类)的meta-...
5、IMP的获取:通过Method来获取method_getImplementation(Method_Nonnull m); 另一种则是通过类方法获取class_getMethodImplementation(Class_Nullablecls,SEL_Nonnullname)在借口说明中也提到了class_getMethodImplementation可能会比method_getImplementation速度更快;所以在获取IMP的时候可以尽量使用class_getMethodImplementation...
2:runtime - object_getClass() 验证 跟踪进入 object_getClass() 方法 --> getIsa() --> ISA(): inline Class objc_object::ISA() { ASSERT(!isTaggedPointer());#ifSUPPORT_INDEXED_ISAif(isa.nonpointer) { uintptr_t slot=isa.indexcls;returnclassForIndex((unsigned)slot); }return(Class)isa...
Class objectClass = [NSObject class]; Class objClass = [obj class]; // 将实例对象作为参数传入,获得类对象(class对象) Class objClass = object_getClass(obj); 每个类在内存中有且只有一个 class 对象(类对象) class 对象(类对象)在内存中存储的信息(只需要存储一份的):isa指针、superClass指针、类...
NSLog(@"get class: %p", object_getClass(obj)); // 通过类名获取类对象 NSLog(@"objcClass: %p", objc_getClass(className)); // 元类对象 // 必需要传入类对象才能获取元类对象 NSLog(@"meta-class: %p", object_getClass([obj class])); ...
object_getClass返回p1的isa指针指向的类,也就是NSKVONotifying_Person,而class方法还是返回Person,这里是为了隐藏NSKVONotifying_Person,才重写了NSKVONotifying_Person内部的class方法 那么新类中被观察属性的setter是如何实现的呢? 当属性值改变的时候,步骤是这样的: ...
元类进去判断,里面会取 XStudent 元类去比较)NSLog(@"XStudent是否是XPerson元类 子类: %i",[XStudent isKindOfClass:object_getClass([XPerson class])]);// true (元类的最上层就是基元类)NSLog(@"XStudent是否是NSObject元类 子类: %i",[XStudent isKindOfClass:object_getClass([NSObject class])])...
END ENTRY _cache_getImp 注释:mask | bucket 中 mask处于高16位,bucket处于低48位 如果缓存找不到该方法调用 LookupImpOrForward 二分查找从isa-superclass 从类-元类-跟元类逐步查找 如果还是无法找到报出一个经典的错误 unregized selector sent to instance ...
person),object_getClass(self.person)); 输出: 会发现在addObserver之后,类的Isa指向发生了变化 3.1.1 NSKVONotifying_XXX 中间派生类 猜测NSKVONotifying_LGPerson这个类是系统动态进行添加,所以需要分析它的进行关系。获取LGPerson的子类 代码语言:javascript 复制 #pragma mark - 遍历类以及子类 - (void)print...