最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2014年07月05日 16:48:50   投稿:shichen2014  
這篇文章主要介紹了Objective-C的內(nèi)省(Introspection)用法,這是面向?qū)ο笳Z言和環(huán)境的一個強大特性,需要的朋友可以參考下

內(nèi)省(Introspection)是面向?qū)ο笳Z言和環(huán)境的一個強大特性,Objective-C和Cocoa在這個方面的表現(xiàn)尤其的優(yōu)秀。內(nèi)省是對象揭示自己作為一個運行時對象的詳細信息的一種能力。這些詳細信息包括對象在繼承樹上的位置,對象是否遵循特定的協(xié)議,以及是否可以響應特定的消息等等。NSObject協(xié)議和類定義了很多內(nèi)省方法,用于查詢運行時信息,以便根據(jù)對象的特征進行識別。

恰當?shù)厥褂脙?nèi)省可以使面向?qū)ο蟮某绦蜻\行更加高效和強壯。也有助于避免錯誤地進行消息派發(fā)、錯誤地假設對象相等。

下面的部分舉例介紹如何在代碼中有效地使用NSObject的內(nèi)省方法。
 
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; 
}

相關文章

  • C++面試八股文之位運算問題詳解

    C++面試八股文之位運算問題詳解

    這篇文章主要為大家介紹了C++面試八股文之位運算的問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • C 語言基礎教程(我的C之旅開始了)[二]

    C 語言基礎教程(我的C之旅開始了)[二]

    C 語言基礎教程(我的C之旅開始了)[二]...
    2007-02-02
  • C語言學籍管理系統(tǒng)源代碼

    C語言學籍管理系統(tǒng)源代碼

    這篇文章主要為大家詳細介紹了C語言學籍管理系統(tǒng)源代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Qt QThreadPool線程池的實現(xiàn)

    Qt QThreadPool線程池的實現(xiàn)

    QThreadPool管理和重新設計單個QThread對象,以幫助降低使用線程的程序中的線程創(chuàng)建成本,本文主要介紹了Qt QThreadPool線程池的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2007-03-03
  • C語言實例上手深入理解操作符的使用

    C語言實例上手深入理解操作符的使用

    C 語言提供了豐富的操作符,有:算術操作符,移位操作符,位操作符,賦值操作符,單目操作符,關系操作符,邏輯操作符,條件操作符等。接下了讓我們在實例中練一下
    2022-05-05
  • C++ Template應用詳解

    C++ Template應用詳解

    本篇文章主要介紹了C++ Template應用詳解,模板(Template)指C++程序設計設計語言中采用類型作為參數(shù)的程序設計,支持通用程序設計。
    2016-12-12
  • OpenCV實現(xiàn)車牌字符分割(C++)

    OpenCV實現(xiàn)車牌字符分割(C++)

    這篇文章主要為大家詳細介紹了OpenCV實現(xiàn)車牌字符分割,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 深入了解C語言冒泡排序優(yōu)解

    深入了解C語言冒泡排序優(yōu)解

    這篇文章主要介紹了C語言冒泡排序法的實現(xiàn)(升序排序法),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-07-07
  • Linux下C語言實現(xiàn)貪吃蛇小游戲

    Linux下C語言實現(xiàn)貪吃蛇小游戲

    這篇文章主要為大家詳細介紹了Linux下C語言實現(xiàn)貪吃蛇小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • C++調(diào)試記錄與心得分享

    C++調(diào)試記錄與心得分享

    本文給大家詳細記錄了一次C++的調(diào)試過程,以及調(diào)試的心得,非常的實用,有需要的小伙伴可以參考下
    2017-07-07

最新評論

建水县| 图木舒克市| 水城县| 白沙| 台北市| 旺苍县| 青龙| 玛多县| 金塔县| 易门县| 常州市| 宁乡县| 安泽县| 多伦县| 蛟河市| 江阴市| 永宁县| 巴林右旗| 双流县| 密山市| 邓州市| 扶风县| 衡阳市| 邢台县| 儋州市| 星子县| 达拉特旗| 青冈县| 罗城| 新绛县| 策勒县| 洛浦县| 兰西县| 重庆市| 新昌县| 图们市| 得荣县| 天全县| 牙克石市| 舟曲县| 英吉沙县|