Runtime 创建动态一个类 添加成员变量 属性
来源:互联网 发布:行爱交流软件 编辑:程序博客网 时间:2024/06/09 20:24
序:
这篇文章主要介绍OC Runtime怎么动态创建类,添加成员变量,添加属性,对象动态绑定keyValue,添加方法。 (主要介绍成员变量和属性) 对于概念还不理解的可以看之前的博客。代码说的再多不如自己写一遍,写过之后肯定有不同的理解。好脑子不如烂笔头,没有什么概念要说的,代码里有注释,下面直接上代码。
Demo地址:https://github.com/RainManGO/RuntimeVarDemo
//// ViewController.m// Runtime动态创建基础详解//// Created by apple on 2017/7/14.// Copyright © 2017年 ZY. All rights reserved.//#import "ViewController.h"#import <objc/runtime.h>@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. [self creatHeroClass];}-(void)creatHeroClass{ /* 创建类 * 参数1 父类 参数二 类名 参数3关于内存默认 */ Class Hero = objc_allocateClassPair([NSObject class], "Hero", 0); class_addMethod(Hero, @selector(R:), (IMP)R, "@@:@");//添加方法 class_addIvar(Hero, "Q", sizeof(NSString *), 0, "@");//添加成员变量 class_addIvar(Hero, "W", sizeof(NSString *), 0, "@");//添加成员变量 //添加属性实现setter getter方法 class_addMethod(Hero, @selector(setW:), (IMP)setW, "v@:@"); class_addMethod(Hero, @selector(getW), (IMP)getW, "@@:"); //注册类 objc_registerClassPair(Hero); //实例化应用 id hanbing = [[Hero alloc]init]; //objc_setAssociatedObject 绑定key value objc_setAssociatedObject(hanbing, @"beidong", @"寒冰的被动", OBJC_ASSOCIATION_COPY); NSLog(@"%@",objc_getAssociatedObject(hanbing, @"beidong")); //通过kvc设置上面定义的成员变量 [hanbing setValue:@"寒冰射手的Q" forKey:@"Q"]; [hanbing setW:@"寒冰的w"]; NSLog(@"%@",[hanbing getW]); //类的属性 objc_property_attribute_t type = { "T", "@\"NSString\"" }; objc_property_attribute_t ownership = { "C", "" }; // C = copy objc_property_attribute_t backingivar = { "V", "E" }; objc_property_attribute_t attrs[] = { type, ownership, backingivar }; class_addProperty(Hero, "E", attrs, 3); //遍历属性查看 unsigned int outCount, i; objc_property_t *properties = class_copyPropertyList([Hero class], &outCount); for (i = 0; i < outCount; i++) { objc_property_t property = properties[i]; fprintf(stdout, "Hero %s : %s\n", property_getName(property), property_getAttributes(property)); } [hanbing R:@"德玛西亚"];}#pragma mark OC方法//OC方法不会调用,但是必须得写。实际调用IMP针织实现。-(void)setW:(NSString *)w{ }-(NSString *)getW{ return nil;}-(NSString *)R:(NSString *)emery{ return nil;}#pragma mark IMP方法void setW(id self,SEL cmd,NSString * str){ Ivar w = class_getInstanceVariable([self class], "W"); NSString * oldW = object_getIvar(self, w); if (oldW!=str) { object_setIvar(self, w, [str copy]); }}NSString * getW(id self,SEL cmd){ Ivar w = class_getInstanceVariable([self class], "W"); return object_getIvar(self, w);}id R(id self,SEL cmd,id emery){ Ivar v = class_getInstanceVariable([self class], "Q"); NSString * vStr = object_getIvar(self, v); NSString * result = [NSString stringWithFormat:@"%@R死了%@",vStr,emery]; NSLog(@"%@", result); return [NSString stringWithFormat:@"R死了%@",emery];}@end
阅读全文
0 0
- Runtime 创建动态一个类 添加成员变量 属性
- Runtime – 获取成员变量、值、动态创建类
- 【Objective-C Runtime动态加载】---动态创建类Class 动态创建类Class,动态添加Class成员变量与成员函数,动态变量赋值与取值,动态函数调用等方法 a.使用objc_
- Runtime-动态创建类添加属性和方法
- Runtime-动态创建类添加属性和方法
- Runtime-动态创建类添加属性和方法
- 59.通过 runtime为Category添加属性与成员变量
- runtime动态添加属性
- Runtime 动态添加属性
- runtime -- 动态添加属性
- runtime 成员变量和属性
- runtime 成员变量和属性变量
- 利用runtime为系统类追加属性、成员变量
- 动态添加属性(Runtime)
- Runtime 运行时:成员变量与属性
- Runtime(二)成员变量与属性
- runtime之属性和成员变量
- 创建一个Rectangle类,添加winth和height两个成员变量.........
- 支付宝首页刷新
- git
- Python相关文章索引(10)
- 2017-07-14:Tarjan(受欢迎的牛)
- log4j配置使用教程
- Runtime 创建动态一个类 添加成员变量 属性
- Spring配置文件<context:property-placeholder>标签使用漫谈
- JS代码练习之键盘事件
- 什么叫做「数据驱动方法」
- Computing Euler angles from a rotation matrix (翻译)
- execjs RSA
- oracle 删除外键 删除所有表
- AI圣经!《深度学习》中文版隆重上市!美国亚马逊AI领域排名第一畅销书!
- MySQL insert技巧