我们在编程过程中,如果使用到了runtime(运行时),我们几乎都是想动态的改变这个类的信息,包括方法,属性,balabala的,并且获得这个类的一些信息,等等,下面我们就来看看怎么通过runtime提供的方法,来达到这些目的
1). 获取 这个类的所有属性

 .h 文件

 @interface RTObj :NSObject
@property(nonatomic,copy)NSString*name;
@property(nonatomic,copy)NSString*webUrl;
@property(nonatomic,copy)NSString*imageUrl;
@property(nonatomic,copy)NSString*type;
-(void)sort;
@end
 .m 文件

 @implementationRTObj
@end
获取这个类的所有属性,首先先包含#import<objc/message.h>,然后调用如下的方法 unsigned int outCount =;
Ivar*vars = class_copyIvarList([RTObj class], &outCount);//获取到所有的成员变量列表
//遍历所有的成员变量
for(int i =; i < outCount; i++) {
Ivar ivar= vars[i];//取出第i个位置的成员变量
constchar*propertyName = ivar_getName(ivar);//获取变量名
constchar*propertyType = ivar_getTypeEncoding(ivar);//获取变量编码类型
printf("---%s--%s\n", propertyName, propertyType);
//或者NSLog(@"---%s--%s\n", propertyName, propertyType);
}

打印结果

---_name--@"NSString"
---_webUrl--@"NSString"
---_imageUrl--@"NSString"
---_type--@"NSString"
然后你就可以 自己去扩展自己的编程思路了,需要注意的是,父类的属相并不会打印出来,也就是 通过这个方法,获取不到父类的 属性
2).改变该类的对象的某一个属性的值
有这样一个对象

RTObj*rtObj = [[RTObj alloc]init];

现在通过 运行时提供的方法,来检查里面有没有 name这个属性,如果有就赋值,没有不赋值,

 RTObj*rtObj = [[RTObj alloc]init];
unsigned int outCount =;
Ivar*vars =class_copyIvarList([rtObj class], &outCount);//获取到所有的成员变量列表
//遍历所有的成员变量
for(inti =; i < outCount; i++) {
Ivarivar = vars[i];//取出第i个位置的成员变量
constchar*propertyName =ivar_getName(ivar);//获取变量名
constchar*propertyType =ivar_getTypeEncoding(ivar);//获取变量编码类型
NSString*proOcName = [NSString stringWithUTF8String:propertyName];
if([proOcName isEqualToString:@"_name"])
{
object_setIvar(rtObj, ivar,@"孙悟空");
}
}
NSLog(@"******:%@",rtObj.name);

最后的打印结果是
**:**孙悟空

iOS runtime 运行时( 二 )的更多相关文章

  1. ios - runtime运行时应用---交换方法

    runtime运行时用法之一 --- 交换类的方法,此处简单写了把系统的UIView的setBackgroundColor的方法换成了自定义的pb_setBackgroundColor 首先创建UIV ...

  2. iOS runtime 运行时( - )

    谈到运行时,相对应的就有编译时: 1).运行时-- 直到程序运行时才去确定一个对象的具体信息,并且可以改变这个类的具体信息,包括它的方法,变量等等: 2).编译时-- 是在程序运行之前,编译的时候,就 ...

  3. iOS runtime 运行时( 三 )

    上一篇 聊的是: 在不知道一个对象有什么属性的情况下, 获取对象的所有属性,然后可以改变属性的值, 今天我们谈谈 怎么通过Category(类别)+runtime 给一个类 添加一个新的属性,一般情况 ...

  4. iOS开发——高级特性&Runtime运行时特性详解

    Runtime运行时特性详解 本文详细整理了 Cocoa 的 Runtime 系统的知识,它使得 Objective-C 如虎添翼,具备了灵活的动态特性,使这门古老的语言焕发生机.主要内容如下: 引言 ...

  5. Runtime运行时的那点事儿

    注:本文是对 Colin Wheeler 的 Understanding the Objective-C Runtime 的翻译. 初学 Objective-C(以下简称ObjC) 的人很容易忽略一个 ...

  6. runtime 运行时机制 完全解读

    runtime 运行时机制 完全解读   目录[-] import import 我们前面已经讲过一篇runtime 原理,现在这篇文章主要介绍的是runtime是什么以及怎么用!希望对读者有所帮助! ...

  7. 编译器设计-RunTime运行时环境

    编译器设计-RunTime运行时环境 Compiler Design - Run-Time Environment 作为源代码的程序仅仅是文本(代码.语句等)的集合,要使其活动,它需要在目标计算机上执 ...

  8. iOS开发之runtime运行时机制

    最近参加三次面试都有被问到runtime,因为不太懂runtime我就只能支支吾吾的说点零碎.我真的好几次努力想看一看runtime的知识,因为知道理解它对理解OC代码内部变化有一定帮助,不过真心觉得 ...

  9. Objective-C Runtime 运行时之二:成员变量与属性

    类型编码(Type Encoding) 作为对Runtime的补充,编译器将每个方法的返回值和参数类型编码为一个字符串,并将其与方法的selector关联在一起.这种编码方案在其它情况下也是非常有用的 ...

随机推荐

  1. linux下生成 SSH 公钥,用于GitHub

    ssh-keygen -t rsa -C <email> 参见 https://help.github.com/articles/generating-ssh-keys/ Then add ...

  2. Android SDK无法更新解决方法

    我这里主要说的是mac下如何设置Android SDK更新,windows下类似 首先说明为什么要这么麻烦,没办法身处在大天朝中,伟大的防火墙,苦逼的程序猿想要查点资料都是非常难的.不废话了,下面进入 ...

  3. 安装CiscoWorks LMS

    安装CiscoWorks LMS,需要安装5张光盘,CiscoWorks LMS的安装步骤比较简单,在这里只介绍需要的重要步骤. 1.安装CD One 将CiscoWorks 2000 LMS CD ...

  4. windows XP系统内核文件分析(全)

    Windows XP个别 System32 文件 System32 文件夹下个别要移除的文件 我们就要删除另外600 个 system32 文件...我们要一次把它们全都解决掉. 以下是我所删除的 S ...

  5. 配置超级用户口令(Cisco IOS系统)

    命令一共有以下几条: (1)enable secret enable secret 0 密码明文 enable secret 5 密码密文(MD5加密) (2)enable password enab ...

  6. 用 const 限定类的成员函数

    类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变. 在设计类的时候,一个原则就是对于不改变数据成员的成员函数都要在后面加 const,而对于 ...

  7. How Tomcat Works(十八)

    在前面的文章中,如果我们要启动tomcat容器,我们需要使用Bootstrap类来实例化连接器.servlet容器.Wrapper实例和其他组件,然后调用各个对象的set方法将它们关联起来:这种配置应 ...

  8. iOS获取文件和文件夹大小

    //通常用于删除缓存的时,计算缓存大小 //单个文件的大小 - (long long) fileSizeAtPath:(NSString*) filePath{ NSFileManager* mana ...

  9. json操作json类型转换

    前提是需要加Jar包: gson-2.2.2.jar package utils; import java.io.BufferedReader;import java.io.FileInputStre ...

  10. JAX-RS入门 一 :基础

    简介 JAX-RS是一套用java实现REST服务的规范,提供了一些标注将一个资源类,一个POJOJava类,封装为Web资源.标注包括: @Path,标注资源类或方法的相对路径 @GET,@PUT, ...