Bootstrap

借用 object_getClass 窥测神器

/** 
 * Returns the class of an object.
 * 
 * @param obj The object you want to inspect.
 * 
 * @return The class object of which \e object is an instance, 
 *  or \c Nil if \e object is \c nil.
 */
OBJC_EXPORT Class _Nullable
object_getClass(id _Nullable obj) 
    OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0, 2.0);

创建一个 NSArray 对象和一个 NSMutableArray 对象,并分别对其执行 object_getClass 方法。

#import <Foundation/Foundation.h>
#import <objc/runtime.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // 创建 NSArray 对象
        NSArray *array = @[@"one", @"two", @"three"];
        
        // 创建 NSMutableArray 对象
        NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:@[@"one", @"two", @"three"]];
        
        // 获取 NSArray 对象的类
        Class arrayClass = object_getClass(array);
        NSLog(@"Class of NSArray object: %@", arrayClass);
        
        // 获取 NSMutableArray 对象的类
        Class mutableArrayClass = object_getClass(mutableArray);
        NSLog(@"Class of NSMutableArray object: %@", mutableArrayClass);
    }
    return 0;
}

输出

执行上述代码后,你将看到类似以下的输出:

Class of NSArray object: __NSArrayI
Class of NSMutableArray object: __NSArrayM

这些类名(如 __NSArrayI__NSArrayM)是 NSArrayNSMutableArray 在运行时的内部表示,反映了它们的实际类型。

;