运行时验证对象功能
来源:互联网 发布:惠州淘宝培训 编辑:程序博客网 时间:2024/04/26 04:09
内省是Objective-C和NSObject类的强大且实用的功能,使您能在运行时了解有关对象的某些东西。您因此可避免代码出错,例如将消息发送到无法识别它的对象,或者误以为对象从一个给定的类继承。
对象会在运行时透露三种重要信息:
1.它是否是特定类或其子类的实例
2.它是否响应消息
3.它是否遵守协议
发现对象是否是特定类或其子类的实例
要发现对象是否是某类或其子类的实例,请在对象上调用isKindOfClass:方法。当应用程序需要发现其响应的消息(实现的或继承的),它有时进行以上的检查。
static int sum = 0;for (id item in myArray) {<span style="white-space:pre"></span>if ([item isKindOfClass:[NSNumber class]]) {<span style="white-space:pre"></span> int i = (int)[item intValue];<span style="white-space:pre"></span> sum += i;<span style="white-space:pre"></span>}}
isKindOfClass:方法将类型为 Class的对象视为参数;要获取此对象,请在类符号上调用class 方法。接着评估此方法返回的 Boolean值,并继续相应的操作。
NSObject 会声明其他方法来发现有关对象继承的信息。例如,isMemberOfClass:方法告诉您,对象是否是特定类的实例;而isKindOfClass:告诉您,对象是否是该类或任何
其后代类的成员。
发现对象是否响应消息
要发现一个对象是否响应一则消息,请在该对象上调用respondsToSelector:方法。应用程序代码通常验证一个对象响应一则消息后,才将消息发送给该对象。
if ([item respondsToSelector:@selector(setState:)]){ [item setState:[self.arcView.font isBold] ?NSOnState :NSOffState];}
respondsToSelector:方法将选择器视为其参数。选择器是一种Objective-C数据类型,用于方法的运行时标识符(runtime identifiers);您使用@selector编译器指令指定选择器。在您的代码中,评估此方法返回的Boolean值,并继续相应的操作。
要识别对象响应的消息,调用respondsToSelector:通常比评估类的类型更有用。例如,一个类的较新版本可能实现以前版本没有的方法。
发现对象是否遵守协议
要发现对象是否遵守协议,请在对象上调用conformsToProtocol:方法。
if ([item respondsToSelector:@selector(setState:)]){ [item setState:[self.arcView.font isBold] ?NSOnState :NSOffState];}
- (void) setDelegate:(id __weak) obj { NSParameterAssert([obj conformsToProtocol: @protocol(SubviewTableViewControllerDataSourceProtocol)]);}
delegate = obj;
conformsToProtocol:方法将协议的运行时标识符视为参数,您使用@protocol编译器指令指定此标识符。评估此方法返回的Boolean值,并继续相应的操作。
请注意,对象可以遵守协议,而不实现其可选方法。
- 运行时验证对象功能
- 运行时验证概述
- 无法创建 SSIS 运行时对象。请验证 DTS.dll 是否可用及是否已注册。
- RegularExpressionValidator验证控件时的验证功能
- 运行时验证工具汇总
- RegularExpressionValidator验证控件时的验证功能及其验证表达式
- 运行时关联对象
- 验证运行时类型识别例子
- Android安全--运行时验证签名
- 模拟登录时的验证码功能
- RTTI运行时对象识别
- 运行时之关联对象
- 在使用RegularExpressionValidator验证控件时的验证功能及其验证表达式
- 使用RegularExpressionValidator验证控件时的验证功能及其验证表达式介绍
- RegularExpressionValidator 验证控件时的验证功能及其验证表达式介绍如下:
- 使用RegularExpressionValidator验证控件时的验证功能及其验证表达式介绍
- 无法创建 SSIS 运行时对象。请验证 DTS.dll 是否可用及是否已注册。此向导无法继续而将终止。 (SQL
- 无法创建 SSIS 运行时对象。请验证 DTS.dll 是否可用及是否已注册。此向导无法继续而将终止
- 一行代码,圆角风雨无阻,告别离屏渲染性能损耗
- 使用非递归过程以O(N)时间反转单链表 使用常数附加空间
- 使用iframe需注意的问题
- 今日BBC
- 天声人語 20160325 親離れ子離れのとき
- 运行时验证对象功能
- Oracle的dual是什么
- Gradle 1.12用户指南翻译——第46章. Java 库发布插件
- 项目演示、需求分析、开发约定、环境搭建
- 博客记录点滴,技术细水流长.
- 启动时间优化方案
- 《iOS Human Interface Guidelines》——Netword Activity Indicator
- 传值总结
- idhttp.post方式 调用datasnap rest 远程方法