runtime objc.h

版本:iOS13.5

objc.h

需要引入头文件#import
runtime其他方法通道

索引

  • 返回选择器的方法的名称。
    sel_getName
  • 注册一个方法并映射到选择器。
    sel_registerName
  • 返回对象的类名称。
    object_getClassName
  • 返回指针,指向为对象分配的所有额外字节。
    object_getIndexedIvars
  • 判断选择器是否有效。
    sel_isMapped
  • 在运行时中注册方法名称。
    sel_getUid

详解

  • 返回选择器的方法的名称。
const char * _Nonnull sel_getName(SEL _Nonnull sel)

效果与runtime的sel_getName相同

  • 注册一个方法并映射到选择器。
SEL _Nonnull sel_registerName(const char * _Nonnull str)

效果与runtime的sel_registerName相同

  • 返回对象的类名称。
const char * _Nonnull object_getClassName(id _Nullable obj)

相当于class_getName(object_getClass(obj))

  • 返回指针,指向为对象分配的所有额外字节。
void * _Nullable object_getIndexedIvars(id _Nullable obj)

使用runtime中的class_createInstance创建实例且当extraBytes大于0时,该方法返回的指针则指向extraBytes的位置,而此处会排队放着一个个Ivar变量。

  • 判断选择器是否有效。
BOOL sel_isMapped(SEL _Nonnull sel)

BOOL 如果选择器有效且具有函数实现则返回YES,否则返回NO。

例:
    BOOL mapped = sel_isMapped(NSSelectorFromString(@"a"));
    BOOL mapped1 = sel_isMapped(@selector(asdfadskljfladksjfakldsj));
    NSLog(@"%@ %@", @(mapped), @(mapped1));

- (void)a {
    NSLog(@"aaa");
}
输出:asdfadskljfladksjfakldsj并没有实现,但还是返回为YES,不知为何。
1 1
  • 在运行时中注册方法名称。
 SEL _Nonnull sel_getUid(const char * _Nonnull str)

该方法与sel_registerName效果相同

SEL 返回对应名称的方法的选择器。

你可能感兴趣的:(runtime objc.h)