精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

成人精品毛片| 丰满的护士2在线观看高清| 日韩电影免费一区| 久热99视频在线观看| 中文字幕99页| 欧美va在线观看| 亚洲人亚洲人成电影网站色| 成人免费大片黄在线播放| 国产精品成人国产乱| 国产一区二区亚洲| 日韩女优视频免费观看| 北条麻妃在线视频| 婷婷丁香在线| 欧美国产精品中文字幕| 粉嫩av一区二区三区免费观看 | 欧美激情网址| 欧美日韩国产中文| 国产黄色一级网站| bt在线麻豆视频| 国产亚洲综合av| 官网99热精品| 国产乱码一区二区| 石原莉奈在线亚洲二区| 欧美激情aaaa| 日本 欧美 国产| 国产一区二区三区电影在线观看| 精品国精品自拍自在线| mm131国产精品| av电影一区| 午夜久久久久久久久久一区二区| 欧美日韩一级在线| 91xxx在线观看| 2020国产成人综合网| av噜噜色噜噜久久| 国产女同91疯狂高潮互磨| 日韩av网站在线观看| 欧美资源在线观看| 久久高清免费视频| 欧美日本一区二区视频在线观看| 一区二区三区国产视频| 少妇毛片一区二区三区| 精品视频自拍| 欧美精品一区二区久久久| 手机在线国产视频| 高清欧美日韩| 欧美三级韩国三级日本三斤| 国产免费毛卡片| 免费在线小视频| 午夜精品影院在线观看| 福利视频一区二区三区四区| 欧美日韩经典丝袜| 亚洲一区欧美一区| 中文字幕日韩精品无码内射| 日本大胆在线观看| 亚洲综合视频在线观看| 日韩av高清在线看片| 国产精品69xx| 黄色成人av在线| 91猫先生在线| 欧美色网在线| 欧美午夜精品久久久久久超碰| 精品久久久久久中文字幕2017| 欧美大片高清| 欧美日精品一区视频| 天天色综合天天色| 精品国产亚洲日本| 精品久久久久久无| 欧美丰满少妇人妻精品| 国产伦精品一区二区三区视频 | 精品国产日本| 日本福利片高清在线观看| 久久久久久久综合色一本| 日韩欧美精品久久| 久操视频在线免费播放| 一区二区三区精品在线| 无码专区aaaaaa免费视频| 欧美成人影院| 欧美妇女性影城| 亚洲少妇中文字幕| 久久99高清| 久久精品国产亚洲7777| 国产亚洲精久久久久久无码77777| 一区视频在线看| 国产成一区二区| 91无套直看片红桃| 不卡影院免费观看| 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | 亚洲一区免费在线观看| www黄色av| 亚洲资源在线| 亚洲精品大尺度| 在线免费看视频| 激情成人综合| 国产精品欧美在线| 亚洲av无码一区二区乱子伦| 99re视频这里只有精品| 在线码字幕一区| 国产在线观看www| 欧美精品成人一区二区三区四区| 插我舔内射18免费视频| 色琪琪久久se色| 97国产真实伦对白精彩视频8| 日本欧美www| 成人中文字幕合集| 天天综合色天天综合色hd| 国产精品探花在线| 欧美二区三区的天堂| 欧美做受喷浆在线观看| 这里只有精品在线| 国产成人精品免费久久久久| 亚洲第一大网站| 欧美韩日一区二区三区| 日韩欧美国产综合在线| 精品久久国产一区| 这里只有精品在线观看| 九九热国产视频| 国产在线视频精品一区| 日本精品一区二区三区视频 | 亚洲一区二区影院| 久久婷婷综合色| 亚洲黄页网站| 久久久视频在线| 国产精品一品二区三区的使用体验 | 国产91久久婷婷一区二区| 亚洲第一精品网站| 亚洲男同性恋视频| 狠狠热免费视频| 日韩手机在线| 高清欧美性猛交xxxx| 99热这里是精品| 国产精品夫妻自拍| 中文字幕成人在线视频| 第一会所亚洲原创| 国产精品ⅴa在线观看h| 日本成人一区| 欧美日韩亚洲精品一区二区三区| wwwxx日本| 国内精品久久久久久久影视蜜臀| 91久久精品国产91久久性色| 91在线视频| 欧美亚洲动漫精品| 99久久久无码国产精品衣服| 国产美女精品| 蜜桃视频日韩| 欧美成人免费电影| 国产午夜精品免费一区二区三区 | 国产精品免费区二区三区观看| 好了av在线| 欧美一级二级在线观看| 91插插插插插插| 国产一区二区三区黄视频| 国产对白在线播放| 五月亚洲婷婷| 97久久久久久| 久久久久久久影视| 欧美又粗又大又爽| 国产亚洲精品久久久久久豆腐| 麻豆精品在线看| 日本xxx免费| 亚洲精品不卡在线观看| 久久久久久噜噜噜久久久精品| 高清一区二区三区四区| 精品国产乱码久久久久酒店| 玖草视频在线观看| 美女诱惑一区| 亚洲欧美综合一区| 99热这里有精品| 欧美日本在线视频中文字字幕| 人成网站在线观看| 色综合天天做天天爱| 国产美女永久免费无遮挡| 蜜臀91精品一区二区三区| 91嫩草国产丨精品入口麻豆| 九九热播视频在线精品6| 日本精品性网站在线观看| av在线资源站| 日韩三级免费观看| 五月婷婷中文字幕| 欧美国产亚洲另类动漫| 久久久久无码精品| 亚洲欧美卡通另类91av| 中文有码久久| 高潮按摩久久久久久av免费| 日韩美女视频免费看| 黄色大片在线播放| 日韩精品极品视频免费观看| 亚洲影院一区二区三区| 亚洲综合在线第一页| 国产精品av久久久久久无| 国产美女精品人人做人人爽| 免费在线观看亚洲视频| 欧美残忍xxxx极端| 九九久久99| 中文成人在线| 日本韩国欧美精品大片卡二| 黄a在线观看| 亚洲男女自偷自拍图片另类| 国产精品久久久久久久免费| 天天色图综合网| 乱老熟女一区二区三区| 久久这里都是精品| 2025中文字幕| 蜜臀精品久久久久久蜜臀| 国产综合av在线| 欧美二区视频| 亚洲图片小说在线| 日韩成人av在线资源| 亚洲尤物视频网| 3d性欧美动漫精品xxxx软件| 久久久久免费视频| 麻豆传媒在线完整视频| 亚洲欧美日韩国产中文| 丰满少妇被猛烈进入| 欧美日韩国产高清一区| 成年人视频在线免费看| 一个色妞综合视频在线观看| 天天爽天天爽天天爽| 久久人人爽爽爽人久久久| 亚洲精品乱码久久久久久蜜桃欧美| 蜜桃视频第一区免费观看| 3d动漫一区二区三区| 夜间精品视频| 国产91av视频在线观看| 国产一区二区三区四区五区传媒| 久久www免费人成精品| 亚洲成人偷拍| 91在线视频一区| 色豆豆成人网| 国产成人一区三区| 亚洲优女在线| 97色在线视频观看| 91丝袜在线| 久久久久久国产精品三级玉女聊斋| 黄色网址在线免费播放| 中文字幕日韩综合av| 成人三级黄色免费网站| 亚洲三级 欧美三级| 久蕉在线视频| 亚洲视频电影图片偷拍一区| 男人天堂综合| 国产一区二区日韩精品欧美精品| 日韩国产福利| 亚洲男人天堂古典| 国产在线一二| 伊人伊成久久人综合网小说| 黄色美女网站在线观看| 伊人亚洲福利一区二区三区| wwwww在线观看免费视频| 中文字幕亚洲精品| 日韩精品成人av| 欧美成人性色生活仑片| 三级网站视频在在线播放| 久久久久久国产三级电影| 蜜桃视频在线网站| 国产大片精品免费永久看nba| 澳门av一区二区三区| 国产精品第8页| 九七影院97影院理论片久久| 91精品久久久久久久久久久久久久 | 欧美日韩一区二区在线| 久久精品视频2| 欧美另类变人与禽xxxxx| av中文字幕第一页| 亚洲成人在线视频播放| 日av在线播放| 中文字幕一精品亚洲无线一区 | 久久久久久国产| 成人欧美大片| 成人黄色av播放免费| 久久久久久爱| 韩国成人一区| 国产一区二区在线| 手机看片日韩国产| 亚洲黄色精品| 日本va中文字幕| 韩国成人精品a∨在线观看| 极品白嫩少妇无套内谢| 91色视频在线| 国产美女网站视频| 亚洲午夜免费视频| 波多野结衣电车痴汉| 91精品国产入口| 视频一区二区在线播放| 日韩视频中文字幕| 欧洲一区精品| 91在线视频成人| 国产精品一区二区av交换| 永久免费在线看片视频| 久久成人一区| 国产亚洲色婷婷久久| 2021久久国产精品不只是精品 | 狠狠久久五月精品中文字幕| 一级爱爱免费视频| 亚洲国产精品女人久久久| www视频在线观看免费| 久久久噜久噜久久综合| 国产成人免费| 久久伊人资源站| 午夜精品免费| 国产精彩免费视频| 粉嫩嫩av羞羞动漫久久久| 精品日韩在线视频| 午夜精品久久久久久久| 国产一区二区自拍视频| 精品视频久久久| 1区2区3区在线视频| 国产精品ⅴa在线观看h| 都市激情亚洲| 亚洲av综合色区| 青椒成人免费视频| 插吧插吧综合网| 亚洲伊人色欲综合网| 97精品人妻一区二区三区在线| 亚洲精品少妇网址| 国产99re66在线视频| 91精品综合视频| 欧美综合视频| 白嫩少妇丰满一区二区| www.成人在线| 久久久久性色av无码一区二区| 欧美日本免费一区二区三区| 男女网站在线观看| 68精品国产免费久久久久久婷婷 | 免费精品视频一区| 亚洲婷婷免费| 亚洲区 欧美区| 自拍偷拍国产亚洲| 亚洲性生活大片| 国产一区二区三区在线播放免费观看 | 88av.com| 久久久蜜臀国产一区二区| 日本网站在线免费观看| 日韩你懂的在线播放| 国内外激情在线| 成人美女免费网站视频| 天天做天天爱天天综合网2021| 日韩精品免费播放| 国产亚洲成年网址在线观看| 国产99久久久| 亚洲欧美一区二区三区情侣bbw| 青青青免费在线视频| 久久综合久久综合这里只有精品| 99热精品在线| 亚洲自拍偷拍一区二区 | 国产又粗又黄又爽| 日韩中文字幕在线精品| 2020国产精品小视频| 国产精品h视频| 国产一区二区导航在线播放| 日韩欧美综合视频| 欧美大片一区二区三区| 男人添女人下部高潮视频在线观看| y111111国产精品久久婷婷| 极品中文字幕一区| 你懂得在线视频| 色综合网站在线| 午夜在线免费观看视频| 91亚洲va在线va天堂va国| 欧美日韩91| 最新在线黄色网址| 色综合天天综合网国产成人综合天| 麻豆导航在线观看| 国产精品揄拍500视频| 一区二区三区四区日韩| 精品伦一区二区三区| 日韩欧美成人精品| 91亚洲欧美| 2020国产精品久久精品不卡| 在线高清一区| 久久精品老司机| 欧美欧美午夜aⅴ在线观看| 91精品久久久久久粉嫩| 国产日韩欧美亚洲一区| 日韩精品每日更新| 日韩女优一区二区| 日韩不卡中文字幕| 国产福利亚洲| 91动漫在线看| 国产亚洲欧美日韩俺去了| 国产精品亚洲lv粉色| 国内精品模特av私拍在线观看| 国产麻豆精品久久| 北条麻妃亚洲一区| 欧美日韩在线视频观看| 色开心亚洲综合| 国产伦精品一区二区三区高清版 | 亚洲小说区图片区| 亚洲激情视频小说| 日韩亚洲欧美在线观看| 亚洲免费福利| 国产成人生活片| 久久欧美一区二区| 国产黄色av片| 国产精品成人aaaaa网站| 欧美.日韩.国产.一区.二区| 欧美熟妇精品黑人巨大一二三区| 91精品啪在线观看国产60岁| 天堂中文在线播放| 亚洲国产一二三精品无码| 国产日韩精品视频一区|