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
,在视图调试的时候,就可以很方便的通过类名称来定位变量。