今天对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是一个强大的工具,它是Objective-C运行时系统的简称,主要负责在程序运行时处理对象、类、协议等的各种操作。Objective-C与静态类型语言如C不同,它采用动态调用过程,即在编译时不会确定具体调用...
在iOS开发中,Objective-C的Runtime是一门强大的技术,它提供了在程序运行时对类和对象进行操作的能力。本文将详细介绍Runtime的四种基础用法:消息机制、方法交换、动态加载方法以及消息转发。 1)**消息机制** ...
在iOS开发中,Runtime是一个强大的工具,它允许我们在运行时检查和修改对象的属性和行为。Runtime库提供了Objective-C语言的底层实现,使得开发者能够进行更底层的操作,比如动态添加属性、方法,甚至改变已有对象的...
在iOS开发中,Runtime是一种强大的工具,它允许我们在运行时检查和修改应用程序的行为。Runtime,全称为Objective-C Runtime,是Objective-C语言的核心组成部分,它在程序执行过程中提供了对类、对象、方法等元数据...
在iOS开发中,数组越界和字典value为nil的问题是常见的运行时错误,这些问题可能导致应用突然崩溃,严重影响用户体验。`ios-runtime 防止数组越界崩溃.zip` 提供了一个解决方案,通过导入名为`NSObject+runtime`的...
总之,通过ArcGIS Runtime for iOS加载天地图,我们可以轻松地在iOS应用中集成中国的地理信息,为用户提供准确、实时的地图服务。结合Esri的SDK和天地图的强大资源,开发者可以构建出满足各种需求的地理信息系统。
runtime专题:http://www.henishuo.com/category/runtime/ GITHUB下载:https://github.com/CoderJackyHuang/RuntimeDemo
iOS-Runtime-Headers, 从运行时自省导出的iOS Objective C 头 动态生成的iOS头以下是从运行时自省导出的iOS objective-c 头。头部是使用 RuntimeBrowser在iPhone上生成的。全文搜索你可以使用 github搜索插件搜索头...
最近做项目的时候遇到一个内容比较无序的表单页面,加上多种判断也可以正常完成功能,但是修改起来特别头疼,所以想到利用Runtime动态添加属性的方法方便判断。 也算是自己一点儿简单的理解,如果有不对的地方,还...
在iOS开发中,Objective-C的运行时(Runtime)系统是一个强大的特性,它使得Objective-C具有了动态性。本文将深入探讨“ios runtime消息转发机制”,理解这个机制对于优化代码、解决潜在问题以及实现高级功能至关...
在iOS开发中,Runtime是一个至关重要的概念,它是一种运行时环境,使得Objective-C和Swift这样的动态语言能够在程序运行过程中解析和执行代码。Runtime系统提供了许多底层功能,包括消息传递、类型检查、动态方法...
iOS运行时(Runtime)是Apple为其移动操作系统iOS和macOS提供的一种核心技术,它是一个底层的接口,使得开发者能够与Objective-C和Swift等编程语言的运行环境进行交互。在这个环境中,对象、类、方法以及消息传递等...
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原理。
1. 对象:在Runtime中,每个Objective-C对象都有一个关联的 isa 指针,指向其所属的类。这个指针使得对象能够在运行时确定其类型。 2. 类:类在Runtime中是元类(meta-class)的对象,存储了类的信息,如属性、方法...
在iOS开发中,Runtime是一个非常重要的概念,它是一种运行时环境,允许我们在程序运行时动态地获取和修改对象的信息,包括方法、属性和关联。Runtime是Objective-C和Swift中的一个核心特性,它使得编程变得更加灵活...