今天对Objective-C中的Runtime了解了下。第一感觉就是跟java中反射很像,原来就是同一性质的东西。Runtime是底层的C语言。可以动态的获取或修改类的方法、属性,动态创建类、类的属性、类的方法等。其实Objective-C在许多实现方面还是在很依赖C的。C还是有毕要再回顾下了。下面就是Runtime获取属性和方法相关代码(需导入#import <objc/runtime.h>):
#import <Foundation/Foundation.h> #import <objc/runtime.h> @interface RuntimeVo : NSObject @property(nonatomic,assign) int mid; @property(nonatomic,strong) NSString *name; @property(nonatomic,strong) NSString *school; - (void) getAttributes; - (void) getMethods; @end
#import "RuntimeVo.h" @implementation RuntimeVo //获取属性 - (void) getAttributes{ unsigned int count = 0; Ivar *ivars = class_copyIvarList([RuntimeVo class], &count); for (int i=0; i<count; i++) { //获取i位置对应的成员变量 Ivar ivar = ivars[i]; //查看成员变量 const char *name = ivar_getName(ivar); NSString *key = [NSString stringWithUTF8String:name]; id value = [self valueForKey:key]; NSLog(@"key=%@, value====%@",key,value); } } //获取方法 - (void) getMethods{ unsigned int count = 0; Method *method = class_copyMethodList([RuntimeVo class], &count); for (int i=0; i<count; i++) { SEL name = method_getName(method[i]); NSString *strName = [NSString stringWithCString:sel_getName(name) encoding:NSUTF8StringEncoding]; NSLog(@"Method name === %@",strName); } } @end
- (void)viewDidLoad { [super viewDidLoad]; RuntimeVo *runVo = [[RuntimeVo alloc] init]; runVo.mid = 1; runVo.name = @"测试"; runVo.school = @"中山"; [runVo getAttributes]; [runVo getMethods]; }
输出结果为:
2015-07-02 18:36:19.498 Test101[6003:146995] key=_mid, value====1 2015-07-02 18:36:19.499 Test101[6003:146995] key=_name, value====测试 2015-07-02 18:36:19.499 Test101[6003:146995] key=_school, value====中山 2015-07-02 18:36:19.499 Test101[6003:146995] Method name === setMid: 2015-07-02 18:36:19.499 Test101[6003:146995] Method name === setSchool: 2015-07-02 18:36:19.499 Test101[6003:146995] Method name === getAttributes 2015-07-02 18:36:19.499 Test101[6003:146995] Method name === getMethods 2015-07-02 18:36:19.499 Test101[6003:146995] Method name === mid 2015-07-02 18:36:19.500 Test101[6003:146995] Method name === school 2015-07-02 18:36:19.500 Test101[6003:146995] Method name === .cxx_destruct 2015-07-02 18:36:19.500 Test101[6003:146995] Method name === name 2015-07-02 18:36:19.500 Test101[6003:146995] Method name === setName:
相关推荐
IOS 中runtime使用方法整理 做iOS的朋友都知道或听说runtime,这个东西很像java的反射机制,但功能远胜于java的反射。通过runtime我们可以动态的向一个类中添加属性、成员变量、方法,以及对其进行读写访问。 新建两...
iOS开发中的Runtime可谓是功能强大,同时Runtime使用起来也是非常灵活的,通过本文一起来学习下iOS中的runtime。
RunTime顾名思义运行时,就是系统在运行的时候的一些机制,最主要的是消息...下面这篇文章主要给大家介绍了关于iOS中Runtime的几种基本用法,文中通过示例代码介绍的非常详细,需要的朋友下面随着小编来一起学习学习吧
runtime专题:http://www.henishuo.com/category/runtime/ GITHUB下载:https://github.com/CoderJackyHuang/RuntimeDemo
ios runtime 消息转发机制。主要描述runtime消息发送的三次补救机会。
转自高手。。。
iOS-Runtime-Headers, 从运行时自省导出的iOS Objective C 头 动态生成的iOS头以下是从运行时自省导出的iOS objective-c 头。头部是使用 RuntimeBrowser在iPhone上生成的。全文搜索你可以使用 github搜索插件搜索头...
最近做项目的时候遇到一个内容比较无序的表单页面,加上多种判断也可以正常完成功能,但是修改起来特别头疼,所以想到利用Runtime动态添加属性的方法方便判断。 也算是自己一点儿简单的理解,如果有不对的地方,还...
数组越界 字典value为nil导致崩溃 只要导入这个分类在项目中就可以解决了 不需要写代码
ArcGIS Runtime SDK for iOS 100.5 压缩包1请配合压缩包2一起解压 压缩包1地址:https://download.csdn.net/download/onajiniyo/11547060 压缩包2地址:https://download.csdn.net/download/onajiniyo/11547096
KVO-----当对象某个属性(例如 demo 中的字符串 name)发生更改时,对象会获得通知,并作出相应处理,本demo用Runtime实现KVO原理。
Runtime
iOS运行时关于对类的解释和消息转发的示例性说明
经实例验证,攻击者可以通过破解加密、反编译可执行文件,获取程序中的 类、方法及属性等信息,进而通过运行时调用Runtime System的API来控制程序。以程序操控或动态注入恶意代 码给iOS系统上的应用程序带来极大危害...
iOS Runtime 开发中文文档,属于一种运行时机制,runtime是属于OC的底层,是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API,可以进行一些非常底层的操作(用OC是无法现实的, 不好实现)。...
runtime实现埋点数据统计,页面停留时间,textfield输入时间,button点击次数。GitHub:https://github.com/YoungLiu666/LYRunTimeLog。顺手给个星,么么哒