Objective-C的內省(Introspection)用法小結。本站提示廣大學習愛好者:(Objective-C的內省(Introspection)用法小結)文章只能為提供參考,不一定能成為您想要的結果。以下是Objective-C的內省(Introspection)用法小結正文
內省(Introspection)是面向對象說話和情況的一個壯大特征,Objective-C和Cocoa在這個方面的表示特別的優良。內省是對象提醒本身作為一個運轉時對象的具體信息的一種才能。這些具體信息包含對象在繼續樹上的地位,對象能否遵守特定的協定,和能否可以呼應特定的新聞等等。NSObject協定和類界說了許多內省辦法,用於查詢運轉時信息,以便依據對象的特點停止辨認。
適當地應用內省可使面向對象的法式運轉加倍高效和強健。也有助於防止毛病地停止新聞派發、毛病地假定對象相等。
上面的部門舉例引見若何在代碼中有用地應用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
檢討對象能否相符協定,能否完成了協定中一切的必選辦法。
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; }