1976年贪婪的嘴唇,韩国少妇激三级做爰2023电影,久久久久久精品国产三级涨奶,妖精漫画在线观看免费漫画下拉式

說說Objective-C的id及動態綁定
來源:易賢網 閱讀:2404 次 日期:2015-04-09 15:59:42
溫馨提示:易賢網小編為您整理了“說說Objective-C的id及動態綁定”,方便廣大網友查閱!

OC動態綁定很重要的一點在于 OC中有一個非常重要的類型叫 id, id是一個指針, 指向類未知的對象, 指向未知類型或未指定的類型. 實際上OC中的所有指針都是id, 當你將消息發給一個對象時, 具體執行什么代碼直到運行時才會決定. 這被叫做動態綁定.

這個特性和其他語言是不一樣的 , 當然你會想到, 如果只在運行時檢測, 那么是否會有安全問題?

其實不用擔心, 因為大部分寫程序的時候都是用靜態類型. 少部分時要進行些保護性措施, 這個后面會說.

比方使用靜態類型化:

NSString *s = @“x”; 編譯器編譯的時候就會檢查,如果指向非NSString會給出警告(這也提醒我們要好好對待編譯器的警告)

id obj = s; id obj是指向任何對象的指針,所以不會產生警告

這種情況在日常寫代碼中也會隨處遇到, 比如NSArray的方法firstObject的類型就是id:

@property(nonatomic, readonly) id firstObject

所以這種時候, 應該加些保護措施. 否則很容易crash !

另外Stanford slide上的一個Demo:

@interface Vehicle : NSObject

-(void)move;

@end

@interface Ship : Vehicle

-(void)shoot;

@end

Ship* s = [[Ship alloc] init];

Vehicle* v = s;

[v shoot];

id obj = v;

[obj shoot];

其中:

[v shoot] //編譯錯誤, 這個在Slide中只是個警告, 估計是編譯器版本問題

[obj shoot] //編譯、運行都正常

這個Demo其實很好的詮釋了id這個類型的特殊性 .

Ship s = [Ship alloc] init];創建了s,Vehicle v = s; s仍然是Ship類型,同時v指向s,v雖然是Vehicle指針,但實際在內存中仍然是Ship類型

id obj = v; obj指向v,v指向s,所以obj實際是指向s的,所以obj是能響應shoot函數的

v 的指針指向Ship那塊內存,[v shoot]由于受到類型的保護 所以報錯, obj由于是id類型所以一切正常.

可以輸出剛才三者指向的地址, 都是指向s所alloc的內存區域的.

指針指向

繼續看下去:

名單

NSString* hello = @"hello";

Ship* helloShip = (Ship *)hello;

[helloShip shoot];

更通俗點解釋是: 告訴編譯器NSString就是Ship(只是把編譯器糊弄了) 所以編譯正常, 第三行在運行時,由于那個地址沒有還是為@”hello”, 當真正去shoot時, 它會分派那個shoot, 結果發送到的地方是個字符串. 導致crash.

同理, 下面這段代碼可以再體會下:

NSString* hello = @"hello";

[hello shoot];

[(id)hello shoot];

更多信息請查看IT技術專欄

更多信息請查看技術文章
易賢網手機網站地址:說說Objective-C的id及動態綁定
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
主站蜘蛛池模板: 介休市| 贵定县| 东至县| 宁武县| 景东| 苏尼特左旗| 黔江区| 新沂市| 布尔津县| 禄丰县| 伊宁县| 桃园县| 蒲城县| 简阳市| 公安县| 雷波县| 赣州市| 海城市| 沿河| 商南县| 广汉市| 夏邑县| 宁安市| 务川| 淅川县| 永和县| 拉萨市| 武穴市| 汤原县| 洪江市| 翁牛特旗| 黄陵县| 东宁县| 南川市| 上杭县| 尚义县| 阳东县| 乡宁县| 无为县| 民勤县| 华安县|