• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > Objective-C的内省(Introspection)用法小结

Objective-C的内省(Introspection)用法小结

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了introspection,self introspection,guest introspection,can的用法小结,want的用法小结等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

内省(Introspection)是面向对象语言和环境的一个强大特性,Objective-C和Cocoa在这个方面的表现尤其的优秀。内省是对象揭示自己作为一个运行时对象的详细信息的一种能力。这些详细信息包括对象在继承树上的位置,对象是否遵循特定的协议,以及是否可以响应特定的消息等等。NSObject协议和类定义了很多内省方法,用于查询运行时信息,以便根据对象的特征进行识别。

恰当地使用内省可以使面向对象的程序运行更加高效和强壮。也有助于避免错误地进行消息派发、错误地假设对象相等。

下面的部分举例介绍如何在代码中有效地使用NSObject的内省方法。
 
1、isKindOfClass:Class

检查对象是否是那个类或者其继承类实例化的对象

2、isMemberOfClass:Class

检查对象是否是那个类但不包括继承类而实例化的对象

示例:

Objective-c代码如下:

if ([item isKindOfClass:[NSData class]]) { 
  const unsigned char *bytes = [item bytes]; 
  unsigned int length = [item length]; 
  // ... 
} 
 </div>

如果item是NSMutableData类实例化的对象,而该类是NSData类的子类,那么[item isKindOfClass:[NSData class]]的值也是TRUE,而[item isMemberOfClass:[NSData class]]的值则为False。
如果item是NSData类实例化的对象,那么[item isMemberOfClass:[NSData class]]的值则为TRUE。

3、respondToSelector:selector

检查对象是否包含这个方法

Objective-c代码如下:

- (void)doCommandBySelector:(SEL)aSelector { 
  if ([self respondsToSelector:aSelector]) { 
    [self performSelector:aSelector withObject:nil]; 
  } else { 
    [_client doCommandBySelector:aSelector]; 
  } 
} 

</div>

4、conformsToProtocol:protocol

检查对象是否符合协议,是否实现了协议中所有的必选方法。

Objective-c代码如下:

// ... 
if (!([((id)testObject) conformsToProtocol:@protocol(NSMenuItem)])) { 
  NSLog(@"Custom MenuItem, '%@', not loaded; it must conform to the 
    'NSMenuItem' protocol.\n", [testObject class]); 
  [testObject release]; 
  testObject = nil; 
}
</div> </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Objective-C的内省(Introspection)用法小结

相关文章

  • 2017-05-28C++进程间共享数据实例
  • 2017-05-28C语言输出旋转后数组中的最小数元素的算法原理与实例
  • 2017-05-28c++ STL容器总结之:vertor与list的应用
  • 2017-05-28详解C语言中的常量指针和指针常量
  • 2017-05-28c++利用stl set_difference对车辆进出区域进行判定
  • 2017-08-27cf 304 Soldier and Traveling 网络流 + 记录流量情况
  • 2017-05-28c++中的消息框messagebox()详细介绍及使用方法
  • 2017-05-28基于欧几里德算法的使用
  • 2017-05-28判断本机office安装版本的方法分享
  • 2017-05-28C++ 中"priority_queue" 优先级队列实例详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 简单的汉诺塔问题解法代码
    • C++中声明类的class与声明结构体的struct关键字详解
    • 简单介绍C++编程中派生类的析构函数
    • 使用WindowsAPI实现播放PCM音频的方法
    • C语言函数语法详解
    • C语言编程入门之程序头文件的简要解析
    • c语言读取obj文件转换数据的小例子
    • C 创建链表并将信息存储在二进制文件中读取的实例代码
    • C++模版函数详解
    • C/C++实现矩阵的转置(示例代码)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有