2.运行时给一个对象增加方法
//C方法形式定义被增加的方法
void helloLog(id self, SEL _cmd)
{
NSLog(@"helloLog");
}
//OC方法形式定义被增加方法
- (void)helloLog
{
NSLog(@"helloLog");
}
//需要新增方法的类
Class newClass = [NSObject class];
//C方法形式
class_addMethod(newClass, @selector(helloLog),(IMP)helloLog, "v@:");
//OC方法形式
class_addMethod(newClass, @selector(helloLog),(IMP)helloLog, "v@:");
//调用新增方法
id instance = [[NSObject alloc] init];
[instance performSelector:@selector(helloLog) withObject:nil];
Objective-C运行时定义了几种重要的类型。
Class
:定义Objective-C类Ivar
:定义对象的实例变量,包括类型和名字。Protocol
:定义正式协议。objc_property_t
:定义属性。叫这个名字可能是为了防止和Objective-C 1.0中的用户类型冲突,那时候还没有属性。Method
:定义对象方法或类方法。这个类型提供了方法的名字(就是**选择器**)、参数数量和类型,以及返回值(这些信息合起来称为方法的**签名**),还有一个指向代码的函数指针(也就是方法的**实现**)。SEL
:定义选择器。选择器是方法名的唯一标识符。-
IMP
:定义方法实现。这只是一个指向某个函数的指针,该函数接受一个对象、一个选择器和一个可变长参数列表(varargs),返回一个对象