- (void)createClass{
Class myClass = objc_allocateClassPair([NSObject class], "myClass", 0);
//添加一个NSString的变量,第四个参数是对其方式,第五个参数是参数类型
if (class_addIvar(myClass, "name", sizeof(NSString *), 0, "@")) {
NSLog(@"添加变量成功");
}
//myclasstest是已经实现的函数,"v@:"这种写法见参数类型连接
class_addMethod(myClass, @selector(myclasstest:), (IMP)myclasstest, "v@:");
//注册这个类到runtime系统中就可以使用它了
objc_registerClassPair(myClass);
//生成了一个实例化对象
id myObj = [[myClass alloc] init];
NSString *str = @"abc";
[myObj setValue:str forKey:@"name"];
[myObj myclasstest:666];
}
//这个方法实际上没有被调用,但是必须实现否则不会调用下面的方法
- (void)myclasstest:(int)a{
}
//调用的是这个方法
static void myclasstest(id self,SEL _cmd, int a){
Ivar v = class_getInstanceVariable([self class], "name");
//返回名为name的ivar的变量的值
id o = object_getIvar(self, v);
NSLog(@"%@",o);
NSLog(@"int a is %d",a);
}