欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)省是對(duì)象揭示自己作為一個(gè)運(yùn)行時(shí)對(duì)象的詳細(xì)信息的一種能力。這些詳細(xì)信息包括對(duì)象在繼承樹上的位置,對(duì)象是否遵循特定的協(xié)議,以及是否可以響應(yīng)特定的消息等等。NSObject協(xié)議和類定義了很多內(nèi)省方法,用于查詢運(yùn)行時(shí)信息,以便根據(jù)對(duì)象的特征進(jìn)行識(shí)別。

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

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

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

2、isMemberOfClass:Class

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

示例:

Objective-c代碼如下:

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

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

3、respondToSelector:selector

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

Objective-c代碼如下:

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

4、conformsToProtocol:protocol

檢查對(duì)象是否符合協(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語言實(shí)現(xiàn)簡(jiǎn)單的掃雷游戲

    基于C語言實(shí)現(xiàn)簡(jiǎn)單的掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了基于C語言實(shí)現(xiàn)簡(jiǎn)單的掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C/C++ Qt 數(shù)據(jù)庫與Chart歷史數(shù)據(jù)展示

    C/C++ Qt 數(shù)據(jù)庫與Chart歷史數(shù)據(jù)展示

    這篇文章主要介紹了Qt利用Qchart組件展示數(shù)據(jù)庫中的歷史數(shù)據(jù)。文中的示例代碼講解清晰,具有一定的學(xué)習(xí)和工作價(jià)值,感興趣的小伙伴可以學(xué)習(xí)一下
    2021-12-12
  • C語言實(shí)現(xiàn)猜拳游戲

    C語言實(shí)現(xiàn)猜拳游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)猜拳游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C++數(shù)據(jù)結(jié)構(gòu)之搜索二叉樹的實(shí)現(xiàn)

    C++數(shù)據(jù)結(jié)構(gòu)之搜索二叉樹的實(shí)現(xiàn)

    了解搜索二叉樹是為了STL中的map和set做鋪墊,我們所熟知的AVL樹和平衡搜索二叉樹也需要搜索二叉樹的基礎(chǔ)。本文將詳解如何利用C++實(shí)現(xiàn)搜索二叉樹,需要的可以參考一下
    2022-05-05
  • C++ 網(wǎng)絡(luò)連通性檢測(cè)的實(shí)現(xiàn)方法

    C++ 網(wǎng)絡(luò)連通性檢測(cè)的實(shí)現(xiàn)方法

    這篇文章主要介紹了C++ 網(wǎng)絡(luò)連通性檢測(cè)的實(shí)現(xiàn)方法的相關(guān)資料,這里提供實(shí)例幫助大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-09-09
  • 詳解C++?functional庫中的仿函數(shù)使用方法

    詳解C++?functional庫中的仿函數(shù)使用方法

    仿函數(shù)(functor)又稱之為函數(shù)對(duì)象(function?object),實(shí)際上就是?重載了()操作符?的?struct或class。本文將詳細(xì)講解C++中仿函數(shù)的使用方法,需要的可以參考一下
    2022-04-04
  • C語言位運(yùn)算和sizeof運(yùn)算符詳解

    C語言位運(yùn)算和sizeof運(yùn)算符詳解

    這篇文章主要介紹了C語言位運(yùn)算和sizeof運(yùn)算符詳解的相關(guān)資料,這里提供了詳細(xì)的知識(shí)要點(diǎn),并附簡(jiǎn)單代碼示例,需要的朋友可以參考下
    2016-11-11
  • 詳解C語言中for循環(huán)與while循環(huán)的用法

    詳解C語言中for循環(huán)與while循環(huán)的用法

    這篇文章主要通過幾個(gè)示例為大家介紹一下C語言中for循環(huán)與while循環(huán)的用法以及二者的區(qū)別,文中的代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C語言有一定幫助,需要的可以參考一下
    2022-07-07
  • 數(shù)據(jù)結(jié)構(gòu)之AVL樹詳解

    數(shù)據(jù)結(jié)構(gòu)之AVL樹詳解

    這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之AVL樹詳解,本文非常細(xì)致的講解了AVL樹的基礎(chǔ)知識(shí)、AVL樹的旋轉(zhuǎn)操作、AVL數(shù)的插入和刪除操作等,需要的朋友可以參考下
    2014-08-08
  • 軟件構(gòu)建工具makefile基礎(chǔ)講解

    軟件構(gòu)建工具makefile基礎(chǔ)講解

    這篇文章介紹了軟件構(gòu)建工具makefile,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12

最新評(píng)論