程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> Objective-C的內省(Introspection)用法小結

Objective-C的內省(Introspection)用法小結

編輯:關於C++

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; 
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved