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

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

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

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

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

下面的部分舉例介紹如何在代碼中有效地使用NSObject的內(nèi)省方法。
 
1、isKindOfClass:Class

檢查對象是否是那個(gè)類或者其繼承類實(shí)例化的對象

2、isMemberOfClass:Class

檢查對象是否是那個(gè)類但不包括繼承類而實(shí)例化的對象

示例:

Objective-c代碼如下:

if ([item isKindOfClass:[NSData class]]) { 
  const unsigned char *bytes = [item bytes]; 
  unsigned int length = [item length]; 
  // ... 
} 
 

如果item是NSMutableData類實(shí)例化的對象,而該類是NSData類的子類,那么[item isKindOfClass:[NSData class]]的值也是TRUE,而[item isMemberOfClass:[NSData class]]的值則為False。
如果item是NSData類實(shí)例化的對象,那么[item isMemberOfClass:[NSData class]]的值則為TRUE。

3、respondToSelector:selector

檢查對象是否包含這個(gè)方法

Objective-c代碼如下:

- (void)doCommandBySelector:(SEL)aSelector { 
  if ([self respondsToSelector:aSelector]) { 
    [self performSelector:aSelector withObject:nil]; 
  } else { 
    [_client doCommandBySelector:aSelector]; 
  } 
} 

4、conformsToProtocol:protocol

檢查對象是否符合協(xié)議,是否實(shí)現(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; 
}

相關(guān)文章

  • C++面試八股文之位運(yùn)算問題詳解

    C++面試八股文之位運(yùn)算問題詳解

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

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

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

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

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

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

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

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

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

    C++ Template應(yīng)用詳解

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

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

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

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

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

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

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

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

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

最新評論

颍上县| 临夏市| 宜兴市| 夏河县| 西林县| 昌江| 上饶县| 敦化市| 福安市| 大足县| 哈巴河县| 林芝县| 抚远县| 玉山县| 贡觉县| 舟山市| 彭州市| 龙游县| 常熟市| 德钦县| 汽车| 鄂尔多斯市| 来安县| 汽车| 昭苏县| 崇阳县| 奇台县| 台湾省| 安阳市| 皮山县| 临朐县| 高陵县| 眉山市| 垫江县| 射洪县| 襄城县| 莱阳市| 得荣县| 冷水江市| 博客| 报价|