雷火电竞-中国电竞赛事及体育赛事平台

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

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

來源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語言|點(diǎn)擊:

內(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; 
}

上一篇:C語言雙向鏈表的表示與實(shí)現(xiàn)實(shí)例詳解

欄    目:C語言

下一篇:C的|、||、&、&&、異或、~、!運(yùn)算符

本文標(biāo)題:Objective-C的內(nèi)省(Introspection)用法小結(jié)

本文地址:http://www.jygsgssxh.com/a1/Cyuyan/3642.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有