`
wenxin2009
  • 浏览: 314567 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ios中的Runtime

    博客分类:
  • ios
 
阅读更多

          今天对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使用方法整理 做iOS的朋友都知道或听说runtime,这个东西很像java的反射机制,但功能远胜于java的反射。通过runtime我们可以动态的向一个类中添加属性、成员变量、方法,以及对其进行读写访问。 新建两...

    总结iOS中runtime的使用

    iOS开发中的Runtime可谓是功能强大,同时Runtime使用起来也是非常灵活的,通过本文一起来学习下iOS中的runtime。

    iOS中Runtime的几种基本用法记录

    RunTime顾名思义运行时,就是系统在运行的时候的一些机制,最主要的是消息...下面这篇文章主要给大家介绍了关于iOS中Runtime的几种基本用法,文中通过示例代码介绍的非常详细,需要的朋友下面随着小编来一起学习学习吧

    ios-runtime专题.zip

    runtime专题:http://www.henishuo.com/category/runtime/ GITHUB下载:https://github.com/CoderJackyHuang/RuntimeDemo

    ios runtime消息转发机制

    ios runtime 消息转发机制。主要描述runtime消息发送的三次补救机会。

    iOS开发Runtime的用法

    转自高手。。。

    iOS-Runtime-Headers, 从运行时自省导出的iOS Objective C 头.zip

    iOS-Runtime-Headers, 从运行时自省导出的iOS Objective C 头 动态生成的iOS头以下是从运行时自省导出的iOS objective-c 头。头部是使用 RuntimeBrowser在iPhone上生成的。全文搜索你可以使用 github搜索插件搜索头...

    ios-Runtime的理解和我在实际项目中的使用.zip

    最近做项目的时候遇到一个内容比较无序的表单页面,加上多种判断也可以正常完成功能,但是修改起来特别头疼,所以想到利用Runtime动态添加属性的方法方便判断。 也算是自己一点儿简单的理解,如果有不对的地方,还...

    ios-runtime 防止数组越界崩溃.zip

    数组越界 字典value为nil导致崩溃 只要导入这个分类在项目中就可以解决了 不需要写代码

    ArcGIS Runtime SDK for iOS 100.5 压缩包1

    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

    iOS利用Runtime实现KVO

    KVO-----当对象某个属性(例如 demo 中的字符串 name)发生更改时,对象会获得通知,并作出相应处理,本demo用Runtime实现KVO原理。

    ios-Runtime.zip

    Runtime

    iOS运行时(runtime)示例代码

    iOS运行时关于对类的解释和消息转发的示例性说明

    iOS+Runtime+System安全性研究.pdf

    经实例验证,攻击者可以通过破解加密、反编译可执行文件,获取程序中的 类、方法及属性等信息,进而通过运行时调用Runtime System的API来控制程序。以程序操控或动态注入恶意代 码给iOS系统上的应用程序带来极大危害...

    iOS Runtime 开发PDF

    iOS Runtime 开发中文文档,属于一种运行时机制,runtime是属于OC的底层,是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API,可以进行一些非常底层的操作(用OC是无法现实的, 不好实现)。...

    ios-runtime埋点.zip

    runtime实现埋点数据统计,页面停留时间,textfield输入时间,button点击次数。GitHub:https://github.com/YoungLiu666/LYRunTimeLog。顺手给个星,么么哒

Global site tag (gtag.js) - Google Analytics