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的時候在去判斷時候有存在這個方法,要是有我們就執行屏蔽
代碼執行個體:
- -(BOOL)canPerformAction:(SEL)action withSender:(id)sender
- {
- id menu = objc_msgSend(NSClassFromString(@"UIMenuController"),NSSelectorFromString(@"sharedMenuController"));
- //或者方法調用respondsToSelector來判斷是否有存在setMenuVisible的方法
- if (menu)
- {
- objc_msgSend(menu,NSSelectorFromString(@"setMenuVisible:"),NO);
- }
- return NO;
- }
小結:iPhone學習筆記 Runtime初探初學者必看的內容介紹完了,希望本文對你有所協助。以上通過自己摸索,總結的概念,如果不對或不妥的地方請留言,共同學習!