Objective-C的內省(Introspection)用法小結
內?。↖ntrospection)是面向對象語言和環(huán)境的一個強大特性,Objective-C和Cocoa在這個方面的表現(xiàn)尤其的優(yōu)秀。內省是對象揭示自己作為一個運行時對象的詳細信息的一種能力。這些詳細信息包括對象在繼承樹上的位置,對象是否遵循特定的協(xié)議,以及是否可以響應特定的消息等等。NSObject協(xié)議和類定義了很多內省方法,用于查詢運行時信息,以便根據(jù)對象的特征進行識別。
恰當?shù)厥褂脙仁】梢允姑嫦驅ο蟮某绦蜻\行更加高效和強壯。也有助于避免錯誤地進行消息派發(fā)、錯誤地假設對象相等。
下面的部分舉例介紹如何在代碼中有效地使用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]; // ... }
如果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]; } }
4、conformsToProtocol:protocol
檢查對象是否符合協(xié)議,是否實現(xiàn)了協(xié)議中所有的必選方法。
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; }
- Swift、Objective-C、Cocoa混合編程設置指南
- Swift調用Objective-C編寫的API實例
- 在Swift中使用Objective-C編寫類、繼承Objective-C類
- Objective-C中常用的結構體NSRange,NSPoint,NSSize(CGSize),NSRect實例分析
- 在一個項目中同時使用Swift和Objective-C代碼混合編程的方法
- Objective-c代碼如何移植為Swift代碼 Objective-c代碼轉移到Swift過程介紹
- Objective-C封裝字符串存儲操作示例
- Objective-C 消息傳遞機制詳解
- objective-c中生成隨機數(shù)的方法
相關文章
C/C++ Qt 數(shù)據(jù)庫與Chart歷史數(shù)據(jù)展示
這篇文章主要介紹了Qt利用Qchart組件展示數(shù)據(jù)庫中的歷史數(shù)據(jù)。文中的示例代碼講解清晰,具有一定的學習和工作價值,感興趣的小伙伴可以學習一下2021-12-12C++數(shù)據(jù)結構之搜索二叉樹的實現(xiàn)
了解搜索二叉樹是為了STL中的map和set做鋪墊,我們所熟知的AVL樹和平衡搜索二叉樹也需要搜索二叉樹的基礎。本文將詳解如何利用C++實現(xiàn)搜索二叉樹,需要的可以參考一下2022-05-05詳解C++?functional庫中的仿函數(shù)使用方法
仿函數(shù)(functor)又稱之為函數(shù)對象(function?object),實際上就是?重載了()操作符?的?struct或class。本文將詳細講解C++中仿函數(shù)的使用方法,需要的可以參考一下2022-04-04詳解C語言中for循環(huán)與while循環(huán)的用法
這篇文章主要通過幾個示例為大家介紹一下C語言中for循環(huán)與while循環(huán)的用法以及二者的區(qū)別,文中的代碼講解詳細,對我們學習C語言有一定幫助,需要的可以參考一下2022-07-07