免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: kiss2003
打印 上一主题 下一主题

讨论下为一个现有的系统增加日志的设计问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-01-06 11:52 |只看该作者
之前还没接触过自省。google了一下,查到这个

摘自:http://www.apple.com.cn/develope ... /Introspection.html


自省是对象的固有能力,即程序运行时,对象可根据请求对外透露自身基本特性。您可以给对象发送某种消息,向其询问与它自身相关的问题,对象和Objective-C 运行时将会向您提供答案。自省是很重要的编码工具,它可以让程序变得更加高效健壮。其用途之广从下面两个例子可见一斑:

您可以调用自省方法进行运行时检测,以此来防止向某个对象发送它无法相应的消息,这样就可以避免由此引发的异常。
您可以使用自省定位对象在继承层次中的位置。通过对象在继承层次中的位置,您可以了解对象具有什么功能。

自省信息的类型

NSObject协议(NSObject 类采用该协议)定义了自省方法。根据这些方法,我们推演得出一个对象应包含下述信息:

类的隶属。该信息用于判断某个对象是否继承(直接或间接)自指定的类。通过向对象发送isKindOfClass:方法并对返回结果进行评估,我们可以判断对象是否为某个类的直接实例。您也可以使用class或者superclass方法获取对象的类或超类,并将返回结果用于比较操作。
能够响应的消息。通过向对象发送respondsToSelector: 消息,我们可以判断对象所属的类或超类是否实现了某个方法。消息的参数是SEL类型的值,它由@selector指令根据所要查询的方法签名构建而来。举个例子:
BOOL doesRespond = [anObject respondsToSelectorselector(writeToFile:atomically];
确认是否遵循某种协议。如果一个类遵循某个正式协议,您可以认为它实现了该协议所要求的方法,因此可以向其发送相应的消息。您可以使用conformsToProtocol:方法获取这方面的信息,方法的参数通过@protocol指令指定。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP