Objective-C的内省方法

方法的存在意义

OC存在一种id的类型,id就是指针,可以指向任何类型的对象。id的存在能够使得NSArray和NSDictionary这种集合类型能够很方便地容纳各种类的对象。但是编译器并不会对id的响应的方法进行检验,也就是说id类型的对象响应任何方法都不会在编译阶段-compile-报错,貌似警告也没有吧……而这种错误会在运行时-runtime-导致崩溃-crash。

所以,我们需要在运行时可以动态的检验对象是否符合相应的条件,以避免程序运行时崩溃,OC为我们提供了一些便捷的方法来进行运行时的检验。它们被定义在NSObject协议中。

方法的内容

- (BOOL)isKindOfClass:(Class)aClass;
- (BOOL)isMemberOfClass:(Class)aClass;
- (BOOL)conformsToProtocol:(Protocol *)aProtocol;
- (BOOL)respondsToSelector:(SEL)aSelector;
使用方法比较简单,从名字就可以看出(OC的方法大多都很直观)。下面简单总结下使用的场合。

方法的使用场合

愚见,凡是涉及到id的时候,都要记得考虑一下是否有进行检查的必要。
比如:
1. 从NSArray等集合中提取对象进行后续操作;
2. 所有的MVC盲通信,如目标动作、代理等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章