iPhone學習筆記 Runtime初探初學者必看

來源:互聯網
上載者:User

iPhone學習筆記 Runtime初探初學者必看 是本文要介紹的內容,runtime通常我們翻譯成運行時,其實就是程式啟動並執行時候才載入執行。

程式分為幾個狀態,編輯時-> 編譯時間(這時候就會到程式中檢查是否有語法錯誤等相關的錯誤)-> 靜態時-> 運行時

比如有些錯誤在編譯的時候是不會出現的,就是程式在文法上沒有問題。但在運行時,因為缺少資源等因素可能出現執行階段錯誤。叫做runtime   error!

比如我們之前我們瞭解的

C運行時::C run-time library裡面含有初始化代碼,還有錯誤處理代碼(例如divide by zero處理)。你寫的程式可以沒有math庫,程式照樣運行,只是不能處理複雜的數學運算,

不過如果沒有了C run-time庫,main()就不會被調用,exit()也不能被響應。因為C run-time library包含了C程式啟動並執行最基本和最常用的函數。

所以每一次在檔案中你要使用runtime的方法的時候都要確認是否已經 #import <objc/runtime.h>

(存在位置   /usr/include/objc/.)

要不會提示找不到方法

這樣比如你使用runtime的objc_msgsend()的方法的時候它就會編譯通過

那這個runtime的具體的用處是怎樣的

如下

比如你在低版本的sdk2.x)編譯的程式,然後要屏蔽掉3.x以上的複製黏貼的功能,要是你直接調用方法比如setEnableCop()

這樣你在2.xSDK編譯的時候就會報錯,找不到所謂的方法,因為這個方法是在3.x以上的版本才會提供,在2.x根本找不到,所以方法我們不能直接的調用。

又因為iphone中的方法調用都是通過訊息的形式來傳遞的,所以我們就可以跳過編譯的步驟,在程式runtime的時候在去判斷時候有存在這個方法,要是有我們就執行屏蔽

代碼執行個體:

 
  1. -(BOOL)canPerformAction:(SEL)action withSender:(id)sender  
  2. {  
  3.     id menu = objc_msgSend(NSClassFromString(@"UIMenuController"),NSSelectorFromString(@"sharedMenuController"));
  4. //或者方法調用respondsToSelector來判斷是否有存在setMenuVisible的方法  
  5.     if (menu)  
  6.     {  
  7.         objc_msgSend(menu,NSSelectorFromString(@"setMenuVisible:"),NO);  
  8.     }  
  9.     return NO;  

小結:iPhone學習筆記 Runtime初探初學者必看的內容介紹完了,希望本文對你有所協助。以上通過自己摸索,總結的概念,如果不對或不妥的地方請留言,共同學習!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.