精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Cocoa 基本原理指南 內(nèi)省介紹

移動開發(fā) iOS
內(nèi)省(Introspection)是面向?qū)ο笳Z言和環(huán)境的一個強大特性,Objective-C和Cocoa在這個方面尤其的豐富。

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

明智地使用內(nèi)省可以使面向?qū)ο蟮某绦蚋痈咝Ш蛷妷选K兄诒苊忮e誤地進行消息派發(fā)、錯誤地假設(shè)對象相等、以及類似的問題。下面的部分將介紹如何在代碼中有效地使用NSObject的內(nèi)省方法。

評估繼承關(guān)系

一旦您知道一個對象屬于什么類,就可能已經(jīng)相當了解這個對象了。您可以知道它具有什么能力、哪些屬性、以及可以響應(yīng)哪些消息。即使在內(nèi)省之后不能了解對象所屬的類,也可以知道該對象不能響應(yīng)特定的消息。

NSObject協(xié)議聲明了幾個方法,用于確定對象在類層次中的位置。這些方法在不同粒度上進行操作,比如class和superclass實例方法分別返回代表類和超類的Class對象。使用這些方法需要將一個Class對象和另一個進行對比。

使用類和超類的方法

  1. // ...   
  2. while ( id anObject = [objectEnumerator nextObject] ) {   
  3.     if ( [self class] == [anObject superclass] ) {   
  4.         // do something appropriate...   
  5.     }   
  6. }  

請注意:有些時候您需要通過class或superclass方法得到正確的類消息接收者。

更加常見的是檢查對象類的從屬關(guān)系,這種情況下您需要向該對象發(fā)送isKindOfClass:或isMemberOfClass:消息。前一個方法返回接收者是否為給定類或其繼承類的實例,isMemberOfClass:消息則告訴您接收者是否為指定類的實例。isKindOfClass: 方法通常更有用,因為通過它可以知道是否可以向該對象發(fā)送一系列消息。考慮列表2-8中的代碼片斷:

 使用isKindOfClass:方法

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

確定tem對象是NSData類的繼承類的實例之后,代碼就知道可以向它發(fā)送NSData的bytes和length消息。假定item是NSMutableData類的一個實例,則isKindOfClass:和isMemberOfClass:之間的差別就變得更加明顯。如果您調(diào)用的是isMemberOfClass:,而不是isKindOfClass:,條件控制塊中的代碼將永遠不會被執(zhí)行,因為item并不是NSData類的實例,而是其子類NSMutableData的實例。

方法實現(xiàn)和協(xié)議遵循

NSObject還有兩個功能更加強大的內(nèi)省方法,即respondsToSelector:和conformsToProtocol:。這兩個方法分別告訴您一個對象是否實現(xiàn)特定的方法,以及是否遵循指定的正式協(xié)議(即該對象是否采納了該協(xié)議,且實現(xiàn)了該協(xié)議的所有方法)。

在代碼中,您可以在類似的情況下使用這些方法。通過這些方法,您可以在將消息或消息集合發(fā)送給某些潛在的匿名對象之前,確定它們是否可以正確地進行響應(yīng)。在發(fā)送消息之前進行檢查可以避免由不能識別的選擇器引起的運行時例外。在實現(xiàn)非正式協(xié)議(這種協(xié)議是委托技術(shù)的基礎(chǔ))時,Application Kit就是在調(diào)用委托方法之前檢查委托對象是否實現(xiàn)該方法(通過respondsToSelector:方法)。

顯示了如何在代碼中使用respondsToSelector:方法。

使用respondsToSelector:方法

  1. - (void)doCommandBySelector:(SEL)aSelector {   
  2.     if ([self respondsToSelector:aSelector]) {   
  3.         [self performSelector:aSelector withObject:nil];   
  4.     } else {   
  5.         [_client doCommandBySelector:aSelector];   
  6.     }   
  7. }  

顯示如何在代碼中使用conformsToProtocol:方法:

使用conformsToProtocol:方法

  1. // ...   
  2. if (!([((id)testObject) conformsToProtocol:@protocol(NSMenuItem)])) {   
  3.     NSLog(@"Custom MenuItem, '%@', not loaded; it must conform to the   
  4.         'NSMenuItem' protocol.\n", [testObject class]);   
  5.     [testObject release];   
  6.     testObject = nil;   
  7. }  

對象的比較

hashisEqual:方法雖然不是嚴格的內(nèi)省方法,但是可以發(fā)揮類似的作用,是進行對象的識別和比較時不可或缺的運行時工具。它們并不向運行環(huán)境查詢對象信息,而是依賴于具體類的比較邏輯。

hashisEqual:方法都在NSObject協(xié)議中聲明,且彼此關(guān)系緊密。實現(xiàn)hash方法必須返回一個整型數(shù),作為哈希表結(jié)構(gòu)中的表地址。兩個對象相等(isEqual:方法的判斷結(jié)果)意味著它們有相同的哈希值。如果您的對象可能被包含在象NSSet這樣的集合中,則需要定義hash方法,并確保該方法在兩個對象相等的時候返回相同的哈希值。NSObject類中缺省的isEqual:實現(xiàn)只是簡單地檢查指針是否相等。

isEqual:的使用相當直接,它將消息的接收者和通過參數(shù)傳入的對象進行比較。對象的比較常常可以在運行時決定應(yīng)該對對象做些什么。如列表2-11所示,您可以通過isEqual:來確定是否執(zhí)行某一個動作。在這個例子中,動作是指保存被修改了的預(yù)置信息。

使用isEqual:方法

  1. - (void)saveDefaults {   
  2.     NSDictionary *prefs = [self preferences];   
  3.     if (![origValues isEqual:prefs])    
  4.         [Preferences savePreferencesToDefaults:prefs];   
  5. }  

如果您正在創(chuàng)建子類,則可能需要重載isEqual:方法,以進一步檢查對象是否相等。子類可能定義額外的屬性,當兩個實例被認為相等時,屬性的值必須相同。舉例來說,假定您創(chuàng)建一個名為MyWidget的NSObject子類,類中包含兩個實例變量:name和data。當MyWidget的兩個實例被認為是相等時,這些變量必須具有相同的值。列表2-12顯示如何在MyWidget類中實現(xiàn)isEqual:方法。

重載isEqual:方法

  1. - (BOOL)isEqual:(id)other {   
  2.     if (other == self)    
  3.         return YES;   
  4.     if (!other || ![other isKindOfClass:[self class]])    
  5.         return NO;   
  6.     return [self isEqualToWidget:other];   
  7. }   
  8.     
  9. - (BOOL)isEqualToWidget:(MyWidget *)aWidget {   
  10.     if (self == aWidget)    
  11.         return YES;   
  12.     if (![(id)[self name] isEqual:[aWidget name]])   
  13.         return NO;   
  14.     if (![[self data] isEqualToData:[aWidget data]])   
  15.         return NO;   
  16.     return YES;   
  17. }  

isEqual:方法首先檢查指針的等同性,然后是類的等同性,***調(diào)用對象的比較器進行比較。比較器的名稱指示出參與比較的對象的類名稱。這種類型的比較器對傳入的對象進行強制類型檢查,是Cocoa中常見的約定,NSString的isEqualToString:和NSTimeZone的isEqualToTimeZone:就是兩個這樣的例子。特定類的比較器(在這個例子中是isEqualToWidget:)負責執(zhí)行name和data變量的等同性。

Cocoa框架的所有isEqualToType:方法中,nil都不是正當?shù)膮?shù),這些方法的實現(xiàn)在接收到nil參數(shù)時會拋出例外。然而為了向后兼容,Cocoa框架中的isEqual:方法可以接收nil值,在這種情況下返回NO。

小結(jié):Cocoa 基本原理指南 內(nèi)省介紹的內(nèi)容介紹完了,希望本文對你有所幫助!

責任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-07-07 13:30:32

Cocoa Core

2011-07-07 14:46:10

Cocoa Xcode

2011-07-07 14:22:27

Cocoa 對象 生命周期

2011-08-10 19:33:09

Cocoa對象

2010-03-18 20:13:03

Java socket

2012-01-12 14:37:34

jQuery

2009-02-24 09:43:00

IP電話原理

2011-11-29 12:17:00

2019-11-28 10:45:28

ZooKeeper源碼分布式

2013-04-07 14:09:55

Android應(yīng)用基本

2010-08-20 13:29:33

OFDM

2020-03-21 14:57:14

手機定位智能手機APP

2016-08-18 00:04:09

網(wǎng)絡(luò)爬蟲抓取系統(tǒng)服務(wù)器

2016-08-17 23:53:29

網(wǎng)絡(luò)爬蟲抓取系統(tǒng)

2021-02-08 21:40:04

SockmapBPF存儲

2009-06-11 09:56:09

MySQL Repli原理

2020-12-29 16:55:44

ZooKeeper運維數(shù)據(jù)結(jié)構(gòu)

2010-03-17 13:35:02

2010-06-18 17:28:37

Linux Anacr

2019-04-30 08:15:31

點贊
收藏

51CTO技術(shù)棧公眾號

91极品视频在线观看| 亚洲天堂中文网| 久久偷看各类女兵18女厕嘘嘘| 久久精品影视| 久久久精品91| 欧美又大又粗又长| 日本不卡高清视频| 韩国中文字幕hd久久精品| 日本一区二区在线| 亚洲第一福利一区| 大伊香蕉精品在线品播放| 日韩精品电影一区二区| 欧美激情亚洲自拍| 激情成人综合网| 国产在线视频资源| 国产精品视频网站在线观看| 欧美午夜精品一区二区三区| 高清日韩欧美| 超碰手机在线观看| 99国精产品一二二线| 国产亚洲一区二区在线观看| 88xx成人免费观看视频库 | 久久久免费看| 午夜精品网站| 精品区在线观看| 国产精品波多野结衣| 日本韩国欧美三级| 外国成人免费视频| 国产精品久久婷婷| 99re6这里有精品热视频| 91福利在线看| 日韩系列欧美系列| 极品国产91在线网站| 久久99精品国产99久久| 色av成人天堂桃色av| 日本不卡二三区| 99热这里精品| 欧美国产视频一区| 日韩av在线免费| 9色国产精品| 国产一二三区在线视频| 青娱乐国产精品视频| 欧美激情精品在线| av电影在线观看完整版一区二区| 天堂8中文在线最新版在线| 给我看免费高清在线观看| 欧美亚洲第一区| 中文字幕日韩av资源站| 国产精品17p| 日韩精选在线观看| 久久亚洲国产成人精品无码区| 亚洲美女激情视频| 国产精品影音先锋| 国产毛片精品久久| 丁香六月婷婷综合| 可以在线看的av网站| 久久精品中文字幕| 欧美高清在线精品一区| 国产精品xxx在线观看| 亚洲天堂一二三| 怡红院亚洲色图| 性欧美xxxx| 午夜精品久久久久久久久久久| 国产精品免费大片| 亚洲欧洲成人在线| 久久久久久久午夜| 久久久综合免费视频| 国产日韩欧美在线一区| 国产福利一区二区精品秒拍| 国产精品一区二区av白丝下载| 日韩av一二三四| 欧美夫妻性视频| 亚洲精品少妇30p| 日韩精品不卡一区二区| 国产精品毛片一区二区三区四区| 亚洲一区二区三区四区av| 69堂成人精品视频免费| 91精品国模一区二区三区| 精品影视av免费| 国产精品视频一区二区三区综合| 一级黄色片免费看| 日本成人在线免费观看| 国产91视觉| 色婷婷久久av| 亚洲影视在线播放| 免费人成在线不卡| 日韩欧美中文字幕一区二区三区| 日本一级在线观看| 殴美一级黄色片| 日本久久久精品视频| 国产精品一区二区女厕厕| 日韩视频永久免费| 91在线小视频| 欧美激情五月| 激情都市亚洲| 亚洲精品久久久蜜桃动漫| 色婷婷精品久久二区二区密| 欧美一区二区影视| 中文字幕日韩欧美| 亚洲男人的天堂av| 亚洲大胆av| 欧美韩国日本| 日韩中文字幕免费在线观看| 波多野结衣片子| 国产黄色激情视频| 国产日韩精品视频| 国产亚洲精品久久久久久牛牛 | 2019av中文字幕| 日本道色综合久久| 国产激情一区二区三区桃花岛亚洲| 免费成人蒂法| 2017亚洲天堂1024| 国产寡妇亲子伦一区二区三区四区| 欧美在线aaa| 色之综合天天综合色天天棕色| 欧美一级大片在线观看| 亚洲国产精品va在线看黑人动漫| 亚洲一区二区视频在线观看| 国产精品伊人色| 亚洲成人原创| 日韩有码av| 牛牛精品一区二区| 精品人妻久久久久一区二区三区| 国产美女永久免费无遮挡| 2022中文字幕| 国产成人精品福利一区二区三区| 日韩一区在线视频| 欧美精品久久久久久久多人混战| 亚洲人成影院在线观看| 国产麻豆91精品| 亚洲欧美日本日韩| 精品视频99| 亚洲四虎影院| 色影视在线观看| 国产特黄一级片| 久一区二区三区| a级在线免费观看| 97人人模人人爽人人澡| 东北少妇不带套对白| 视频一区视频二区视频三区视频四区国产| 国产精品久久久久秋霞鲁丝 | 6080国产精品一区二区| 国产女主播视频一区二区| 免费观看久久久4p| 综合久久一区| 波多野结衣在线观看一区二区三区| 国产一区二区av在线| 成人欧美大片| 色老头在线一区二区三区| a天堂中文在线88| 午夜福利理论片在线观看| 中文av免费观看| 国产成人在线免费观看视频| 日本欧美一区二区三区不卡视频| 久久久无码人妻精品无码| wwwwwxxxx日本| 国产三级国产精品国产专区50| 欧美日韩国产精品激情在线播放| 亚洲最新免费视频| 日韩国产精品一区二区三区| www.久久爱.cn| 亚洲专区国产精品| 国产精品va在线播放| 午夜精品一区二区三区av| 亚州国产精品久久久| 国内揄拍国内精品| 欧美中文字幕精品| 国产99久久精品一区二区| 992tv成人免费视频| 久久91亚洲人成电影网站| 色婷婷**av毛片一区| 中文字幕日韩电影| 精品国产欧美成人夜夜嗨| 免费91麻豆精品国产自产在线观看| 中日韩午夜理伦电影免费 | 久久久精品三级| 黄色小视频免费网站| 中文字幕 欧美 日韩| 男人网站在线观看| 永久免费看mv网站入口78| youjizz亚洲女人| 国语对白在线播放| 麻豆亚洲av熟女国产一区二 | 国产一线在线观看| 亚洲天堂av网站| 国产精品久久不卡| 国产白丝一区二区三区| 日韩手机在线观看| 在线免费一区二区| 无码精品人妻一区二区| av影片在线看| 91在线超碰| 色8久久久久| 你微笑时很美电视剧整集高清不卡| 欧美r级电影| 中文欧美日韩| 国产精品综合二区| 久久久久国色av免费看影院| 亚洲美女淫视频| 欧美日韩国产一级二级| 国产视频久久久久| 国内免费精品永久在线视频| 国产精品久久电影观看| 黑人巨大精品欧美一区二区小视频| 日韩理论片在线观看| 欧美成人一区二区在线观看| 秘密基地免费观看完整版中文| 国产综合精品久久久久成人av| 日本高清www免费视频| 国产精品久久久久久久一区二区| 欧洲免费在线视频| 国产精品亚洲d| 国产精品一区二区av日韩在线| 在线看片欧美| 国产91丝袜在线18| 亚洲一区二区三区爽爽爽爽爽| 日韩精品一区二区三区视频在线观看| 久久精彩免费视频| 成人免费网站在线| 一区不卡字幕| 日韩av影视大全| 欧美黄色免费看| 丰满少妇高潮在线观看| 男人久久天堂| 国产精品亚洲人成在99www| 久久美女性网| 国产精品污污网站在线观看| 4438x亚洲最大成人网| 欧美成人合集magnet| 成人自拍偷拍| 欧美黄色免费影院| 成人免费毛片xxx| 香蕉av在线播放| 粉嫩一区二区三区| 99久久婷婷这里只有精品| 国产成人一区在线| 欧美三区免费完整视频在线观看| 超薄丝袜一区二区| 久久av一区二区三区漫画| 91香蕉视频导航| 久草精品视频在线观看| 日本网站在线免费观看视频| 精品素人av| 国产综合久久久久久久久久久久| 亚洲一区在线看| 一区二区三区视频免费在线观看| 亚洲一区二区三区成人在线视频精品 | 日韩在线观看你懂的| 豆国产97在线| 久久久久久综合网| 国产精品久久久久精| 日韩三区免费| 亚洲一区日韩| 午夜电影一区二区| 欧美极品美女视频网站在线观看免费| 亚洲成人蜜桃| 人妻体内射精一区二区| 欧洲免费在线视频| 蜜乳av综合| 国产日韩精品一区| 亚洲欧美日韩精品久久亚洲区| 91九色蝌蚪嫩草| 午夜福利三级理论电影| 国内精品久久久久久久久久| 在线免费观看亚洲| 国产自产高清不卡| 精品国产乱码久久久久久闺蜜| 99国产精品久久久久老师| 91人妻一区二区三区| 亚洲国产视频一区二区三区| 国产无遮挡裸体免费久久| 九九精品视频在线看| 欧美日韩www| 国产福利久久精品| 香蕉网在线播放| av女优在线| 黄色成人精品网站| 欧美日韩在线免费视频| 91精品国产一区二区三区动漫 | 在线播放黄色av| 日本免费一区视频| 不卡日本视频| 午夜激情一区二区| 成人黄色激情网| av直播在线观看| 麻豆视频在线免费观看| 国产精品久久久久久模特 | 美女扒开腿让男人桶爽久久软| 久久综合五月| 精品国一区二区三区| 亚洲高清在线观看一区| 精品视频久久久久| 精品69视频一区二区三区| 高清不卡一二三区| 中文字幕亚洲天堂| 僵尸世界大战2 在线播放| 中文字幕日韩三级| 免费成人结看片| 天天综合色天天综合色h| 91精品美女在线| 五月婷婷六月香| 欧美成人家庭影院| 国产欧美日本一区二区三区| 日本成人激情视频| 在线观看日韩精品视频| 91视频欧美| 丁香啪啪综合成人亚洲小说| 色在人av网站天堂精品| 免费av不卡在线| 黄色的网站在线观看| 国产高清亚洲一区| 欧美高清自拍一区| 中文字幕avav| а√天堂中文在线资源8| www.日韩大片| 7777免费精品视频| 欧美 日韩 成人| 四虎影视国产精品| 成人欧美一区二区三区白人| 亚洲在线免费观看| 国产亚洲第一页| 亚洲第一福利社区| 欧美视频三区在线播放| 亚洲精品视频一区二区三区| 96日本xxxxxⅹxxx17| 91精品啪在线观看国产81旧版| 欧美一卡2卡三卡4卡5免费| 久久久天堂国产精品| 午夜成人免费影院| 六月丁香综合在线视频| 欧美高清无遮挡| 日本成人免费视频| 538任你躁精品视频网免费| 欧美午夜精品伦理| 99re99热| 国产经典自拍视频在线观看| 国产精品一区二区三区99| 国产成人涩涩涩视频在线观看| 亚洲一区电影在线观看| 国产劲爆久久| 精品国产免费一区二区三区香蕉| 国产超碰在线播放| 变态调教一区二区三区| 17c精品麻豆一区二区免费| 精品一区二区日本| jlzzjlzzjlzz亚洲人| 蜜臀av性久久久久蜜臀av麻豆| 668精品在线视频| 久青草免费视频| 欧美日韩在线大尺度| www.欧美精品| 69精品无码成人久久久久久| 亚洲妇女av| 精品亚洲男同gayvideo网站| 午夜视频在线观看国产| 中文字幕亚洲在线观看| 这里只有精品电影| av噜噜在线观看| 国产精品免费精品自在线观看| 欧美另类一区二区三区| 欧美性受xxxxxx黑人xyx性爽| 韩国成人在线| 欧美日韩国产一级二级| 欧美体内she精高潮| 9l视频自拍九色9l视频成人| 欧美va亚洲va香蕉在线 | 久热国产在线| 亚洲乱码日产精品bd| av中文字幕av| 无遮挡爽大片在线观看视频| 精品久久久久久国产| 国产超级av在线| 国产高清亚洲| 精品香蕉一区二区三区| 麻豆视频免费在线播放| 国产精品多人| 国产精品成人一区二区| 精品人妻无码一区二区三区蜜桃一 | 国偷自产av一区二区三区| 亚洲欧美激情四射在线日| 肉色超薄丝袜脚交69xx图片| 国语自产精品视频在线看8查询8| 国产成人精品免费视频| 精品国产一级片| 欧美激情一区二区三区蜜桃视频| 无码人妻aⅴ一区二区三区日本| av在线加勒比| 欧美一级片在线看| 欧美特级黄色录像| 亚洲精品三级| 国产精品sss| av在线app| 欧美电影影音先锋| 在线不卡av电影| 一区二区动漫| 国产成人精品一区二区三区福利 | 成人激情视频在线观看| 少妇高潮一区二区三区99小说| 一区二区三区视频在线看| 污网站在线免费|