内省

作者: y2015 | 来源:发表于2018-02-07 20:57 被阅读7次

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

灵活的使用内省能力可以让你的程序更稳定强大。内省可以避免错误地进行消息派发、对象相等的错误判断等问题。下面介绍内省的一些实用方法:

//返回实例变量的Class对象,与 + (Class)class 相同。
- (Class)class

//实例变量父类Class对象
@property (readonly) Class superclass;

//检查对象是否是那个类或者其继承类实例化的对象
- (BOOL)isKindOfClass:(Class)aClass;

//检查对象是否是那个类但不包括继承类而实例化的对象
- (BOOL)isMemberOfClass:(Class)aClass;

//检查对象是否符合协议,是否实现了协议中所有的必选方法。
- (BOOL)conformsToProtocol:(Protocol *)aProtocol;

//检查对象是否包含这个方法
- (BOOL)respondsToSelector:(SEL)aSelector;

//判断一个实例不继承自NSObject,如果返回NO就是继承自NSObject,反之返回YES
- (BOOL)isProxy;
//返回对象对应哈希值
@property (readonly) NSUInteger hash;

//检查两个对象是否相等
- (BOOL)isEqual:(id)object;

两个对象比较是否相等(注意与==区别,本体性与相等性,NSObject直接比较指针(本体性),若子类要比较,则需重写该方法。
如果你写的子类还需要添加到集合类型(NSDictionary,NSSet等)中去,hash方法也需要重写, 详情看isEqual、==的区别, hash用法

相关文章

  • 2 内省

    1、内省(Introspector) — JavaBean内省基于反射实现,主要用于操作JavaBean,通过内省...

  • java内省优化工具类BeanUtils(优化内省并防止内存泄漏

    java内省(Introspector)java内省优化工具类BeanUtils(优化内省并防止内存泄漏) Spr...

  • 内省别人的内省

    前几天听一位中科院的老师讲当代心理学概论与新进展,老师提到一个对我来说很新颖的方法论——内省别人的内省。 比如,当...

  • 2020-05-05

    内省

  • 内省

    今年过年第一次开车,本来自己脾气还算好吧,至少感觉能控制住,但是今年一次会车让我彻底失望了。歇斯底里的发火,差点控...

  • 内省

    2018/3/21 今天早上起来起来发现感冒又严重了,有点状态低落。起来和妈妈吵架了,妈妈说我把太多的时间放在聊天...

  • 内省

    现代人,有不少都是无道德底线、无生活防线、无事业前线的“三无”之人,而我们要把生活高于事业有成。当然,做文人和...

  • 内省

    繁花逐枯木,空镜碾妆台。 不知心所处,飘零清霜来。

  • 内省

    行走儿童阅读的路上,其实是寻找自己的过程。从某种角度说,阅读的意义在于帮助读者认识自己。

  • 内省

    比如, 这个受伤的感觉是真的吗? 那个痛苦的感觉是怎么引发的? 是她的那个行为、那句话、那种感觉让我觉得很“受伤”...

网友评论

      本文标题:内省

      本文链接:https://www.haomeiwen.com/subject/tlgazxtx.html