`
wenxin2009
  • 浏览: 320494 次
  • 性别: 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是一个强大的工具,它是Objective-C运行时系统的简称,主要负责在程序运行时处理对象、类、协议等的各种操作。Objective-C与静态类型语言如C不同,它采用动态调用过程,即在编译时不会确定具体调用...

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

    在iOS开发中,Objective-C的Runtime是一门强大的技术,它提供了在程序运行时对类和对象进行操作的能力。本文将详细介绍Runtime的四种基础用法:消息机制、方法交换、动态加载方法以及消息转发。 1)**消息机制** ...

    IOS 中runtime使用方法整理

    在iOS开发中,Runtime是一个强大的工具,它允许我们在运行时检查和修改对象的属性和行为。Runtime库提供了Objective-C语言的底层实现,使得开发者能够进行更底层的操作,比如动态添加属性、方法,甚至改变已有对象的...

    iOS开发Runtime的用法

    在iOS开发中,Runtime是一种强大的工具,它允许我们在运行时检查和修改应用程序的行为。Runtime,全称为Objective-C Runtime,是Objective-C语言的核心组成部分,它在程序执行过程中提供了对类、对象、方法等元数据...

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

    在iOS开发中,数组越界和字典value为nil的问题是常见的运行时错误,这些问题可能导致应用突然崩溃,严重影响用户体验。`ios-runtime 防止数组越界崩溃.zip` 提供了一个解决方案,通过导入名为`NSObject+runtime`的...

    arcgis runtime for iOS加载天地图

    总之,通过ArcGIS Runtime for iOS加载天地图,我们可以轻松地在iOS应用中集成中国的地理信息,为用户提供准确、实时的地图服务。结合Esri的SDK和天地图的强大资源,开发者可以构建出满足各种需求的地理信息系统。

    ios-runtime专题.zip

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

    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消息转发机制

    在iOS开发中,Objective-C的运行时(Runtime)系统是一个强大的特性,它使得Objective-C具有了动态性。本文将深入探讨“ios runtime消息转发机制”,理解这个机制对于优化代码、解决潜在问题以及实现高级功能至关...

    ios-Runtime.zip

    在iOS开发中,Runtime是一个至关重要的概念,它是一种运行时环境,使得Objective-C和Swift这样的动态语言能够在程序运行过程中解析和执行代码。Runtime系统提供了许多底层功能,包括消息传递、类型检查、动态方法...

    iOS运行时(runtime)示例代码

    iOS运行时(Runtime)是Apple为其移动操作系统iOS和macOS提供的一种核心技术,它是一个底层的接口,使得开发者能够与Objective-C和Swift等编程语言的运行环境进行交互。在这个环境中,对象、类、方法以及消息传递等...

    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

    1. 对象:在Runtime中,每个Objective-C对象都有一个关联的 isa 指针,指向其所属的类。这个指针使得对象能够在运行时确定其类型。 2. 类:类在Runtime中是元类(meta-class)的对象,存储了类的信息,如属性、方法...

    ios-对runtime的练习,对页面的统计.zip

    在iOS开发中,Runtime是一个非常重要的概念,它是一种运行时环境,允许我们在程序运行时动态地获取和修改对象的信息,包括方法、属性和关联。Runtime是Objective-C和Swift中的一个核心特性,它使得编程变得更加灵活...

Global site tag (gtag.js) - Google Analytics