Runtime-动态创建类添加属性和方法
2014-04-18 17:00
483 查看
- (void)createClass { Class MyClass = objc_allocateClassPair([NSObject class], "myclass", 0); //添加一个NSString的变量,第四个参数是对其方式,第五个参数是参数类型 if (class_addIvar(MyClass, "itest", sizeof(NSString *), 0, "@")) { NSLog(@"add ivar success"); } //myclasstest是已经实现的函数,"v@:"这种写法见参数类型连接 class_addMethod(MyClass, @selector(myclasstest:), (IMP)myclasstest, "v@:"); //注册这个类到runtime系统中就可以使用他了 objc_registerClassPair(MyClass); //生成了一个实例化对象 id myobj = [[MyClass alloc] init]; NSString *str = @"asdb"; //给刚刚添加的变量赋值 // object_setInstanceVariable(myobj, "itest", (void *)&str);在ARC下不允许使用 [myobj setValue:str forKey:@"itest"]; //调用myclasstest方法,也就是给myobj这个接受者发送myclasstest这个消息 [myobj myclasstest:10]; } //这个方法实际上没有被调用,但是必须实现否则不会调用下面的方法 - (void)myclasstest:(int)a { } //调用的是这个方法 static void myclasstest(id self, SEL _cmd, int a) //self和_cmd是必须的,在之后可以随意添加其他参数 { Ivar v = class_getInstanceVariable([self class], "itest"); //返回名为itest的ivar的变量的值 id o = object_getIvar(self, v); //成功打印出结果 NSLog(@"%@", o); NSLog(@"int a is %d", a); }
相关文章推荐
- Runtime-动态创建类添加属性和方法
- Runtime-动态创建类添加属性和方法
- iOS 面试题(十):runtime 使用——(动态添加方法/动态交换方法/动态添加属性)
- Runtime消息机制,交换方法,动态添加方法,分类添加属性
- Javascript 创建类并动态添加属性及方法
- iOS:runtime的使用(动态添加方法、关联方法、交换方法、遍历私有属性)
- 笔记:利用 runtime 交换方法、给分类动态添加属性
- Javascript 创建类并动态添加属性及方法的简单实现
- runtime 系列-1.动态添加类及类属性 4000 ,并为类动态添加方法
- Runtime 创建动态一个类 添加成员变量 属性
- 【Objective-C Runtime动态加载】---动态创建类Class 动态创建类Class,动态添加Class成员变量与成员函数,动态变量赋值与取值,动态函数调用等方法 a.使用objc_
- python语言是动态语言、给类添加属性、方法、静态方法和类方法、__slots__()、python中的生成器、yield的用法
- 动态添加属性(Runtime)
- runtime - 方法动态添加
- runtime实战(二)动态添加方法
- runtime获取属性列表,修改属性值,添加并修改私有方法的调用
- 动态创建html内容时所用的W3C DOM属性和方法
- PHP动态创建属性的get和set方法
- Runtime-动态添加方法
- javascript面向对象(对象的创建以及属性和方法的添加)