国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Objective-C的內省(Introspection)小結

2019-11-14 19:50:12
字體:
來源:轉載
供稿:網友

內省(Introspection)是面向對象語言和環境的一個強大特性,Objective-C和Cocoa在這個方面尤其的豐富。內省是對象揭示自己作為一個運行時對象的詳細信息的一種能力。這些詳細信息包括對象在繼承樹上的位置,對象是否遵循特定的協議,以及是否可以響應特定的消息。NSObject協議和類定義了很多內省方法,用于查詢運行時信息,以便根據對象的特征進行識別。

明智地使用內省可以使面向對象的程序更加高效和強壯。它有助于避免錯誤地進行消息派發、錯誤地假設對象相等、以及類似的問題。
下面的部分將介紹如何在代碼中有效地使用NSObject的內省方法。

 

1、isKindOfClass:Class
檢查對象是否是那個類或者其繼承類實例化的對象
2、isMemberOfClass:Class
檢查對象是否是那個類但不包括繼承類而實例化的對象
示例:

Objective-c代碼 復制代碼 收藏代碼
  1. if ([item isKindOfClass:[NSData class]]) {  
  2.     const unsigned char *bytes = [item bytes];  
  3.     unsigned int length = [item length];  
  4.     // ...  
  5. }  
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代碼 復制代碼 收藏代碼
  1. - (void)doCommandBySelector:(SEL)aSelector {  
  2.     if ([self respondsToSelector:aSelector]) {  
  3.         [self performSelector:aSelector withObject:nil];  
  4.     } else {  
  5.         [_client doCommandBySelector:aSelector];  
  6.     }  
  7. }  
- (void)doCommandBySelector:(SEL)aSelector {    if ([self respondsToSelector:aSelector]) {        [self performSelector:aSelector withObject:nil];    } else {        [_client doCommandBySelector:aSelector];    }}

 
4、conformsToPRotocol:protocol
檢查對象是否符合協議,是否實現了協議中所有的必選方法。

Objective-c代碼 復制代碼 收藏代碼
  1. // ...  
  2. if (!([((id)testObject) conformsToProtocol:@protocol(NSMenuItem)])) {  
  3.     NSLog(@"Custom MenuItem, '%@', not loaded; it must conform to the  
  4.         'NSMenuItem' protocol./n", [testObject class]);  
  5.     [testObject release];  
  6.     testObject = nil;  
  7. }  

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 清远市| 衡东县| 永胜县| 蒙山县| 仁怀市| 湖北省| 永泰县| 桦甸市| 西林县| 余庆县| 应城市| 广水市| 许昌县| 内黄县| 玛曲县| 贵南县| 孟连| 旺苍县| 元阳县| 卢氏县| 隆尧县| 惠来县| 锦州市| 大关县| 深泽县| 上犹县| 亚东县| 河南省| 西畴县| 丰都县| 五常市| 绥化市| 赣榆县| 靖宇县| 宕昌县| 施秉县| 邹城市| 高邑县| 普洱| 基隆市| 阿拉善盟|