ObjC 黑魔法:在 App 运行期间创建一个类型(Class)

Aug 26, 2025 • 预计阅读时间 1 分钟

ObjC 是动态语言,不需要预先在源码中声明就可以在运行期间创建一个 Class,有极大的灵活性,直接上代码举例:

#import <objc/runtime.h>

FOUNDATION_EXPORT NS_SWIFT_UI_ACTOR id _Nullable createRuntimeClass(Class _Nullable superclass, NSString *name) {
    if (Class cls = objc_getClass(name.UTF8String)) {
        return [[cls alloc] init];
    }

    if (Class cls = objc_allocateClassPair(superclass ?: NSObject.class, name.UTF8String, 0)) {
        objc_registerClassPair(cls);

        return [[cls alloc] init];
    }

    return nil;
}

使用的时候:

UIImageView *_avatarView = createRuntimeClass(UIImageView.class, @"_AvatarView");

以上就创建了一个 UIImageView 的子类 _AvatarView,在视图调试的时候,就可以很方便的通过类名称来定位变量。

ObjC
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

阿里云 Debian VPS 初始化后 Todo 清单