2019独角兽企业重金招聘Python工程师标准>>>

什么是 RUNTIME ?

1.Runtime就是运行时,OC就是运行机制也就是在运行的时候的一些机制。其主要有消息机制。

2.对于C语言来说,函数调用在编译的时候就会决定调用哪个函数;而对于OC的函数,是属于动态调用过程的,在编译的时候并不决定真正调用哪个函数,只有在真正运行的时候才会根据函数名称去找到对应的函数来调用。

3.在编译阶段,OC可以调用任何函数,即使这个函数并未实现,只有存在声明就不会报错。而C语言在编译阶段调用未实现的方法是会报错的。

如何 RUNTIME 通过获取属性和方法名?

【oschina】http://git.oschina.net/emo_lin/RUNTIME

1. 获取该类中.h和.m中成员变量,可以通过 class_copyPropertyList 来实现。

// 获取该类中.h和.m中成员变量,可以通过 class_copyPropertyList 来实现。
-(NSArray *)allPropertyies {unsigned int count;objc_property_t * property = class_copyPropertyList([self class], &count);NSMutableArray * propertyieArray = [NSMutableArray arrayWithCapacity:count];for (NSUInteger i = 0; i < count; i++) {const char * propertyName = property_getName(property[i]);NSString * name = [NSString stringWithUTF8String:propertyName];[propertyieArray addObject:name];}free(property);return propertyieArray;
}

2.获取对象的有值的属性名和属性值,如果属性名没有值需要为其赋空。

// 获取对象的有值的属性名和属性值,如果属性名没有值需要为其赋空。
- (NSDictionary *)allPropertyNamesAndValues {NSMutableDictionary *resultDict = [NSMutableDictionary dictionary];unsigned int outCount;// 开辟内存空间objc_property_t *properties = class_copyPropertyList([self class], &outCount);for (int i = 0; i < outCount; i++) {objc_property_t property = properties[i];const char *name = property_getName(property);// 得到属性名NSString *propertyName = [NSString stringWithUTF8String:name];// 获取属性值id propertyValue = [self valueForKey:propertyName];if (propertyValue && propertyValue != nil) {[resultDict setObject:propertyValue forKey:propertyName];}}// 释放内存空间free(properties);return resultDict;
}

3. 获取该类中的所有方法时,包括通过@property为成员变量自动生成的setter和getter方法,可以通过class_copyMethodList来实现。

// 获取该类中的所有方法时,包括通过@property为成员变量自动生成的setter和getter方法,可以通过class_copyMethodList来实现。
- (void)allMethods {unsigned int outCount = 0;Method *methods = class_copyMethodList([self class], &outCount);for (int i = 0; i < outCount; ++i) {Method method = methods[i];// 获取方法名称,但是类型是一个SEL选择器类型SEL methodSEL = method_getName(method);// 需要获取C字符串const char *name = sel_getName(methodSEL);// 将方法名转换成OC字符串NSString *methodName = [NSString stringWithUTF8String:name];// 获取方法的参数列表int arguments = method_getNumberOfArguments(method);NSLog(@"方法名:%@, 参数个数:%d", methodName, arguments);}// 记得释放free(methods);
}

4.获取所有的私有成员变量,可以通过class_copyIvarList实现。

// 获取所有的私有成员变量,可以通过class_copyIvarList实现。
- (NSArray *)allMemberVariables {unsigned int count = 0;Ivar *ivars = class_copyIvarList([self class], &count);NSMutableArray *results = [[NSMutableArray alloc] init];for (NSUInteger i = 0; i < count; ++i) {Ivar variable = ivars[i];const char *name = ivar_getName(variable);NSString *varName = [NSString stringWithUTF8String:name];[results addObject:varName];}free(ivars);return results;
}

转载于:https://my.oschina.net/linweida/blog/742859

iOS 进阶 - RUNTIME 运行时相关推荐

  1. RunTime运行时在iOS中的应用之UITextField占位符placeholder

    RunTime运行时机制 runtime是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API. 在我们平时编写的Objective-C代码中, 程序运行过程时, 其实最终 ...

  2. iOS运行时Runtime浅析

    运行时是iOS中一个很重要的概念,iOS运行过程中都会被转化为runtime的C代码执行.例如[target doSomething];会被转化成objc)msgSend(target,@select ...

  3. android极光推送在app开启后,在ios上,app后台运行时,如何在极光消息推送过来时,运行一段自定义的代码(请求,语音播报等)...

    通常情况下,app在ios上后台运行时,发送的推送无法被app监听,并执行自定义操作. 这个时候,需要发起Remote Notifications(ios7开始支持后台) ios7和ios6对比: 可 ...

  4. iOS APP 运行时防Crash工具XXShield练就

    原文地址 前言 正在运行的 APP 突然 Crash,是一件令人不爽的事,会流失用户,影响公司发展,所以 APP 运行时拥有防 Crash 功能能有效降低 Crash 率,提升 APP 稳定性.但是有 ...

  5. 【iOS沉思录】Objective-C语言的动态性总结(编译时与运行时)

    编译时与运行时 编译时: 即编译器对语言的编译阶段,编译时只是对语言进行最基本的检查报错,包括词法分析.语法分析等等,将程序代码翻译成计算机能够识别的语言(例如汇编等),编译通过并不意味着程序就可以成 ...

  6. Go 运行时(go runtime)的含义

    go 运行时,也称为 go runtime.其本身就是每个 go 程序的一部分,它会跟你的源码一起编译并连接到目标程序中.即便你只是写了一个 hello world 程序,这个程序中也包含了 runt ...

  7. Deep Learning部署TVM Golang运行时Runtime

    Deep Learning部署TVM Golang运行时Runtime 介绍 TVM是一个开放式深度学习编译器堆栈,用于编译从不同框架到CPU,GPU或专用加速器的各种深度学习模型.TVM支持来自Te ...

  8. “ compiler-rt”运行时runtime库

    " compiler-rt"运行时runtime库 编译器-rt项目包括: • Builtins-一个简单的库,提供了代码生成和其他运行时runtime组件所需的特定于目标的低级接 ...

  9. CUDA运行时 Runtime(四)

    CUDA运行时 Runtime(四) 一. 图 图为CUDA中的工作提交提供了一种新的模型.图是一系列操作,如内核启动,由依赖项连接,依赖项与执行分开定义.这允许定义一次图形,然后重复启动.将图的定义 ...

最新文章

  1. svn的更新、合并、提交
  2. LeetCode - 28. Implement strStr()
  3. 重新理解微服务--转
  4. css pc和mobile,初识pc端和mobile端CSS适配利器—vw+rem+CSS locks
  5. 用CMD命令实现一个简单的网页搜索
  6. mysql ef 分布式事务_分布式事务系列--分布式跨库查询解决方案 mysql federated引擎的使用...
  7. 0401互联网新闻 | 企业微信新版发布;阿里巴巴发布“AI谣言粉碎机”
  8. 加入新的地方,要开始积累了
  9. 7搭建zabbix_监控03分布式监控Zabbix
  10. webcrypto库下载_使用WebCrypto API的电子签名
  11. C++ 11 nullptr关键字
  12. 设计灵感素材网站:美工设计者必备
  13. linux串口环形缓冲区,能不能讲解下串口环形缓冲区的概念?
  14. Shell 反引号、$() 和 ${} 的区别
  15. 线性支持向量机与软间隔最大化
  16. 佳能g3800打印机黄灯和绿灯交替闪是什么情况?
  17. Qt Designer的使用
  18. 极路由2hc5761刷华硕固件_[固件] 【原创首发】极二路由HC5761 9012.1.9227s成功刷成openwrt...
  19. Kibana7.9.2设置elasticsearch索引过期时间,到期自动删除
  20. SQL视图是什么?视图的作用,视图可以更改么?

热门文章

  1. python123程序作业答案说句心里话_作业 -- 几道简单的Python题
  2. 根据坐标点鼠标 不移动_CAD移动鼠标时,鼠标右下角有坐标提示,怎么取消?...
  3. mac u盘格式化 linux系统文件,Mac上怎么制作Ubuntu的U盘开启盘(装Linux系统)
  4. Python如何在控制台显示进度条
  5. 【杂谈】深度学习之模型设计书看完了完全不过瘾?那这些拓展资料你都看了不?...
  6. 【NLP】自然语言处理专栏上线,带你一步一步走进“人工智能技术皇冠上的明珠”。...
  7. 全球及中国二乙氨基羟基苯甲酰基苯甲酸己酯行业规模分析与市场需求预测报告2022版
  8. 全球及中国汽车物流行业未来发展方向与投资机遇研究报告2022版
  9. 全球及中国速冻菠萝市场消费潜力及供需前景调研报告2021-2027年
  10. android+studio+选择+苹方字体,启动欢迎页面时,Android Studio设置全屏Activity