国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

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

2020-01-26 15:30:15
字體:
供稿:網(wǎng)友

內(nèi)省(Introspection)是面向?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; }
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 德惠市| 社会| 巴彦淖尔市| 晋城| 潢川县| 印江| 西安市| 嵊泗县| 万全县| 石狮市| 崇左市| 彭阳县| 景东| 靖远县| 水城县| 浦县| 河北区| 福州市| 娱乐| 满城县| 抚松县| 多伦县| 邓州市| 达州市| 岳池县| 鹤山市| 泸州市| 九龙坡区| 淳化县| 双流县| 婺源县| 本溪市| 伽师县| 宾阳县| 大余县| 都江堰市| 永昌县| 隆尧县| 巴彦县| 城市| 左云县|