国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

解析Objective-C反射

移動開發 iOS
Objective-C有一個定位危機:它是解釋型語言還是編譯語言?運行時很大程度上是動態的。和C++不同,Objective-C是運行時綁定的。這也是為什么我們可以在實現時定義一個從來沒有在頭文件中聲明的方法,

Objective-C反射是本文要介紹的內容,我第一次接觸Java的時候就覺得整個反射包都很新穎,它使得Java和解釋型的腳本語言更接近了,與此同時也拉開了和主流的C和C++的距離。

在運行時可以窺視到一個對象的類元數據真的很不可思議,盡管這些可能不會在日常應用編程中經常使用到。從Java轉到Objective-C的程序員應該會樂見Objective-C也支持反射。實際上,Objective-C有很多諸如動態改變類定義以及創建一個新類的動態特征。

不過很難說這些功能有多大的作用,這也讓我覺得Objective-C是一個有些臃腫的語言。在我看來,Objective-C有一個定位危機:它是解釋型語言還是編譯語言?運行時很大程度上是動態的。和C++不同,Objective-C是運行時綁定的。這也是為什么我們可以在實現時定義一個從來沒有在頭文件中聲明的方法,或者通過Category擴展類。不幸的是由于這種臃腫使得找到一些日常編程中有用的東西變得困難,本文就是要去發現其中的一些“寶藏”。

根類NSObject

大部分(如果不是全部的話)的動態反射支持來自NSObject 類。和Java的Object對象類似,NSObject是所有類(除了一些很少見的例外)的根類。所以所有你寫的類應該都可以支持反射。需要指出的所有這些的反射支持并不是Objective-C語言的一部分,而是源于NS*的運行時環境。這也是為什么這些東西感覺被加入一些額外東東的原因。因為它就是被加入了額外東東。

獲取類的元數據 通過調用如下的類方法你就可以獲取到一個對象的類的元數據:

  1. Class c = [self class]; 

該方法既是實例方法也是類方法。它返回一個帶有很多神奇信息的C構造體,比如實例變量、方法等等。所有這些和java.lang.reflect包相比都有些過時了,利用Objective-C訪問這些信息的接口看起來很復雜。這可能就是故意設計成這樣來“過濾”一些不合格的程序員。目前為止我唯一使用這些的地方就是為下面將要介紹的isKindOfClass:方法提供參數。一直以來我都不需要去窺視類結構的內容。

動態方程調用我已經在方法調用一文中介紹了反射的一個方面。這使得你可以在運行時創建一個方法調用并傳入參數。這和Java中使用java.lang.reflect.Method類很相似。

檢查繼承關系

Java有一個名為instanceof的操作符可以用來檢查一個對象是否是一個特定類或者接口的實例。 Objective-C也有類似的功能,就是通過isKindOfClass:方法。isKindOfClass:會在消息接收者是指定類及其子類的實例的情況下返回YES。比如有一個關聯的指針數組,這樣就可以根據其類型進行不同的操作:

  1. for(BaseClass* base in myArray) {  
  2. if([base isKindOfClass:[ClassOne class]]) {  
  3. // do stuff specific to ClassOne  
  4. } else if([base isKindOfClass:[ClassTwo class]]) {  
  5. // do stuff specific to ClassTwo  
  6. } else if([base isKindOfClass:[ClassThree class]]) {  
  7. // do stuff specific to ClassThree }  
  8. // etc } 

如果你需要一個精確的類匹配,而不是匹配任何繼承類,你就可以使用isMemberOfClass:方法。

檢查是否符合協議 和實例檢查類似,你可以測試一個對象是否符合特定的協議。Java在類和接口的情況下都使用instanceof 方法搞定,但Objective-C使用了一個更笨重的方法。在測試是否合規的時候,應該使用conformsToProtocol:方法:

  1. BOOL conforms = [obj conformsToProtocol:@protocol(MyInterface)]; 

檢查方法是否存在對于像我這樣Java和C++的老手來說,如果不知道一個對象是否實現了一個方法就很奇怪了。但是Objective-C的類很大程度上是動態的,你就需要檢查你需要的方法是否存在。這就需要respondsToSelector:方法。如下代碼就是檢查接收者是否實現(或者繼承)了指定方法:

  1. if([obj respondsToSelector:@selector(aMethod:)])   
  2. { // it's there, so we can call it [obj aMethod:YES];  
  3.  } 

當然,利用Objective-C反射你可以做更多的事情,這里我只是嘗試談談反射機制最常見的應用。如果你需要在你的軟件中加入核心的動態特性,你就需要熟悉下這些文檔:

  1. Runtime Programming Guide: Introduction Runtime Reference 

小結:解析Objective-C反射的內容介紹完了,希望通過本文的學習能對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2013-03-27 12:54:00

iOS開發Objective-C

2011-08-05 15:46:32

Objective-C 程序設計

2011-08-11 17:39:25

Objective-C筆試題

2011-08-15 14:02:36

Objective-C

2011-07-29 16:08:31

Objective-C 內存

2013-06-20 10:40:32

Objective-C實現截圖

2011-05-11 11:20:26

Objective-C

2011-05-11 15:58:34

Objective-C

2011-08-04 15:52:48

Objective-C HTML

2011-08-04 11:15:46

Objective-C 構造函數 構造方法

2011-05-11 13:54:08

Objective-C

2011-08-04 14:58:37

Objective-C Cocoa NSString

2013-08-21 14:57:42

objective-c問題

2011-08-02 13:16:36

Objective-C 語法 函數

2011-05-11 15:45:50

內存管理Objective-C

2011-05-11 14:06:49

Objective-C

2011-08-17 10:58:59

Objective-C構造函數

2011-07-08 13:49:46

Objective-C UUID

2012-06-15 09:47:48

Objective-CCategory

2011-08-03 16:55:05

Objective-C 代理
點贊
收藏

51CTO技術棧公眾號

国产一区二区香蕉| 男裸体无遮挡网站| 九九九九九九精品任你躁| 精品av在线播放| 亚洲一二区在线| 国产高清一区二区| 免费不卡在线观看av| www.久久ai| 亚洲成人动漫精品| 成年人网站大全| 国产一区成人| 国产欧美一区二区三区久久人妖| 国产综合色激情| 精品电影一区二区三区| 头脑特工队2在线播放| 在线观看成人免费| 在线观看欧美理论a影院| 日韩精品视频在线| 黄色小视频在线观看| 欧美国产精品v| japanese在线播放| 男人的天堂亚洲| 成人网址在线观看| 香蕉久久精品| 久久99亚洲热视| gogo亚洲高清大胆美女人体| 欧美福利一区二区| 日韩a在线观看| 一区二区三区在线看| 中文字幕在线观看第三页| 国产毛片精品一区| 中文字幕中文字幕在线中一区高清 | 乱小说综合网站| 国产美女亚洲精品7777| 成人性视频网站| 日韩国产一区久久| 国产精品久久国产愉拍| 亚洲伊人一本大道中文字幕| 美日韩中文字幕| 亚洲91精品在线观看| 在线一区二区三区视频| 久久成人精品一区二区三区| 成人噜噜噜噜| 欧美韩国理论所午夜片917电影| 91九色成人| 欧美激情手机在线视频| 啊灬啊灬啊灬啊灬高潮在线看| 中文字幕第一页久久| 亚洲精品自拍网| 亚洲欧美日韩综合aⅴ视频| 中文天堂av| 欧美在线观看禁18| 大片免费在线看视频| 欧美成人激情免费网| 手机在线观看av| 精品国产一区二区三区久久狼黑人 | 男女啪啪的视频| 国产一区二三区| 国产精品专区在线| 国产精品欧美精品| 波多野结衣av在线| 日本乱人伦aⅴ精品| 黄网站免费在线播放| 日韩电影第一页| 日韩一二三区在线观看| 精品视频一区二区不卡| 免费av在线网址| 亚洲国产中文字幕久久网| 成人免费影院| 欧美极品少妇xxxxx| 成人在线电影在线观看视频| 国产精品自拍首页| 国产一区高清在线| 白天操夜夜操| 欧美二区三区91| 国产麻豆久久| 庆余年2免费日韩剧观看大牛| 欧美激情日韩| 另类美女黄大片| 在线视频亚洲专区| 国产精品区一区二区三含羞草| 麻豆精品蜜桃视频网站| 男女男精品视频站| 欧美在线|欧美| 成人做爰视频www| 国产精品毛片a∨一区二区三区|国 | 91香蕉视频污版| 色成年激情久久综合| h片在线观看下载| 欧美激情成人在线视频| 91tv官网精品成人亚洲| 路边理发店露脸熟妇泻火| 亚洲日本一区二区| 丁香花在线观看完整版电影| 午夜精品一区二区三区在线视| 亚洲夜间福利| av网址在线观看免费| 欧美性猛交xxxx久久久| 婷婷午夜社区一区| 国产日韩欧美自拍| 国产精品系列在线播放| 欧美老女人在线视频| 欧美一区二区三区高清视频| 日韩精品另类天天更新| 亚洲欧洲日本在线| www.欧美日本| 精品视频在线视频| 亚洲国产中文在线二区三区免| av色综合网| 国产精品久久久久四虎| 国产高清视频色在线www| 国产日韩在线观看av| av中文字幕亚洲| 最新超碰在线| 成人一区二区电影| 国产欧美日韩一区二区三区在线观看| 成人免费观看在线| 色www精品视频在线观看| 97久久综合精品久久久综合| 欧美lavv| 婷婷综合久久一区二区三区| 国产精品成人3p一区二区三区| 噜噜噜噜噜久久久久久91| 亚洲人成网站影音先锋播放| xxxxx性欧美特大| 久久伊人一区二区| 日韩欧美大尺度| 妖精视频一区二区三区| 日本a视频在线观看| 精品国产1区2区3区| 亚洲婷婷在线| 亚洲大胆精品| 久久久女人电视剧免费播放下载 | 午夜日韩电影| 成视频年人免费看黄网站| 亚洲天堂精品在线| 国产经典一区| 精品视频导航| 亚洲 欧美综合在线网络| av综合网页| 国产天堂在线播放| 精品国内产的精品视频在线观看| 老牛嫩草一区二区三区日本| 伊人网在线视频| 57pao成人永久免费视频| av在线不卡顿| 91高跟黑色丝袜呻吟在线观看| 欧美韩日一区二区三区四区| 国产成人精选| 欧美激情亚洲天堂| 亚洲精品成人久久电影| 香蕉久久久久久久av网站| 欧美美女黄色网| 欧美一区二区性放荡片| 欧美1区2区| 校园春色欧美| 成人福利免费观看| 高跟丝袜一区二区三区| 91久久国产| аⅴ资源新版在线天堂| 国产精品免费一区二区三区| 欧美日韩美少妇| 我爱我色成人网| 亚洲伊人婷婷| 亚洲欧美视频在线| 成人动漫视频在线| 国产精品免费精品自在线观看| 久久久久狠狠高潮亚洲精品| 九九精品在线视频| 亚洲欧美自拍偷拍| 精品视频亚洲| 国产youjizz在线| 伊人精品在线观看| 99久久国产综合精品女不卡| 国产亚洲字幕| 日本加勒比高清在线| 国产成人精品久久| 五月天亚洲精品| 国产精品尤物| 日韩不卡免费高清视频| 凹凸日日摸日日碰夜夜爽1| 91大神在线播放精品| 午夜精品视频在线观看| 精品电影一区| 日韩大片欧美大片| 在线观看免费污视频| 91免费看片在线| 欧美xxx久久| 91丝袜国产在线播放| 成人精品中文字幕| 免费大片黄在线观看视频网站| 亚洲一区二区三区色| 欧美精品一区二区三区国产精品| 亚洲色图在线视频| 国产日韩欧美三级| 在线高清欧美| 日韩偷拍自拍| 欧美一级视频免费看| 91久热免费在线视频| 国产一区二区日韩|