版本:iOS13.5
objc.h
需要引入头文件#import <objc/objc.h>
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 返回对应名称的方法的选择器。
网友评论