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盲通信,如目標動作、代理等。

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