国产探花免费观看_亚洲丰满少妇自慰呻吟_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. }  

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安陆市| 平利县| 河北省| 吉水县| 曲松县| 南木林县| 恩平市| 襄樊市| 邵武市| 离岛区| 广汉市| 沁水县| 崇阳县| 元江| 静安区| 鲜城| 云和县| 中牟县| 阳山县| 岐山县| 清丰县| 来安县| 辽宁省| 体育| 侯马市| 文山县| 临朐县| 宁强县| 磐安县| 图木舒克市| 卓资县| 鸡西市| 都昌县| 龙川县| 辽阳县| 安图县| 石狮市| 灵石县| 建宁县| 礼泉县| 汤阴县|