導航:首頁 > 源碼編譯 > oc源碼編譯

oc源碼編譯

發布時間:2024-09-07 11:16:08

⑴ iOS源碼解析—YYModel(NSObject+YYModel)

​ iOS源碼解析—YYModel(YYClassInfo) 分析了如何根據OC的Class對象構建YYClassInfo對象,為接下來的JSON數據和Model轉換作準備,這篇文章開始講解NSObject+YYModel。

​ 分析NSObject+YYModel.h文件,包括3個Category和一個protocol,分別是:

字典studentDic中的key對應原字典playerDic中的key,studentDic中的Model由playerDic中的value轉化得到。

首先定義了兩個類,_YYModelMeta和_YYModelPropertyMeta,分別封裝了Model的信息和Model中各屬性的信息。

_YYModelMeta維護了Class的相關信息,下面是注釋:

_YYModelMeta是通過YYClassInfo對象的信息構建得到的。首先調用metaWithClass:cls方法,該方法如下:

維護了一個鍵值對cache作為緩存,用cls作為key,調用CFDictionaryGetValue方法去緩存中查找,如果有,直接返回構建好的_____YYModelMeta對象,如果沒有找到或者needUpdate屬性標記為true,則根據cls創建一個新的_YYModelMeta對象,並且存入緩存。這樣不需要每次都創建,提高了性能。

接下來看一下initWithClass:方法,

下面分析幾個重要的方法:

YYModel的總體思想是以Model屬性的類型為准,如果JSON中對應名稱的value的類型和Model屬性類型不一致,會對value的類型進行轉化,保證和Model屬性的類型一致。如果兼容不了,不進行屬性賦值。下面分析一下ModelSetValueForProperty方法:

該方法上文中提到該方法是用來JSON轉成Model的過程中對Model中的屬性進行賦值的方法,該方法做了部分基本類型的兼容:

YYModel還提供了一些工具方法,下面簡單分析一下:

YYModel作為一個負責JSON數據和Model轉化的庫,十分易用和高效,特別是做了一些類型的兼容和轉化,避免了服務端介面數據類型和客戶端Model對象類型不兼容導致的問題,例如執行了不存在的方法而導致崩潰。另一方面,對YYModel的學習在一定程度也促進了對runtime機制的學習和了解。

關於YYModel的分析到這兒先告一段落,由於本人的iOS基礎有待提升,再加上表達能力有限,文中許多地方的分析和思路,表達的不是很准確和清楚,希望通過今後的學習和練習,提升自己的水平。

⑵ 安卓平台屬於動態庫操作嗎

屬於
靜態庫全稱靜態鏈接庫,動態庫全稱動態鏈接庫,看到全稱就知道什麼意思了吧?也就是說在鏈接的時候才會用到的庫,只有C/C++、OC語言才會有鏈接過程,java沒有。

android中說到靜態庫和動態庫,一般說的都是C/C++代碼,我們知道在android中是通過jni技術訪問到C代碼的,我們會把C/C++打包成so文件,這個就是動態庫(共享庫)。如果我們想要使用的C庫是.a形式的靜態庫時,我們要把.a包裝成so庫,具體網上有方法。

個人感覺在java語言中討論靜態庫和動態庫就是個偽概念,java是的編譯結果是位元組碼文件,不是二進制文件,而且沒有鏈接的過程,jvm在解釋執行java代碼的時候調用C++代碼只能是動態的。

在C++和object C開發中,用編譯鏈接的過程,靜態庫在鏈接過程中,會和自己寫的源代碼打到一塊,多個程序多個靜態庫。動態庫不會打到一塊,如果有共享情況的話,系統只會載入一次。

OC的代碼處理過程是很復雜的,有預處理、編譯、鏈接過程,預處理就是處理宏什麼的,編譯這個過程就很復雜了,有編譯前端和編譯後端,編譯稱機器碼(中間還會有匯編的過程),鏈接就是鏈接動態庫或者靜態庫。

Android(java)代碼處理過程就很簡單啦,畢竟是運行在虛擬機上的。沒有所謂的預處理,直接編譯,這里的編譯也就是把java代碼轉化成位元組碼,這個編譯和OC中的編譯可不是一個概念,只不過也這么叫而已。後續Aandroid還會用dex工具把.class打包成.dex,不同的VM模式(5.0以後都是ART)會對.dex進行不同的優化,具體看Android 編譯到運行APK過程總結。需要提一下的是,ART採用AOT和JIT技術,在安裝或者運行的時候,會把位元組碼轉化成機器碼,這個機器碼也會受VM控制的,具體看Android之Dalvik 、ART

C/C++、Object C屬於編譯型語言,這是毋庸置疑的,因為它們都會在生成安裝包之前編譯成機器碼。

⑶ iOS 的 framework 和 ipa 文件可以反編譯出源碼嗎

ipa 文件其實是一個壓縮包,裡麵包括了可執行文件,資源文件等信息。
反編譯的話也可以,只是你要有足夠強的功底,就可以。這個至少匯編得會吧,然後可以根據反編譯出來的匯編寫出原來的OC程序。現在我沒有發現有什麼工具可以直接反編譯出ELF文件的。
框架(framework)是一個基本概念上的結構,用於去解決或者處理復雜的問題。這個廣泛的定義使用的十分流行,尤其在軟體概念。框架也能用於機械結構。

閱讀全文

與oc源碼編譯相關的資料

熱點內容
安卓路由表怎麼看 瀏覽:74
10個小孩分糖果python 瀏覽:823
安卓app小紅點怎麼取消 瀏覽:286
馬哥linux面授 瀏覽:768
2345程序員 瀏覽:371
怎麼開啟網速顯示安卓 瀏覽:204
索尼950app怎麼樣 瀏覽:391
計算機畢設論文源碼 瀏覽:148
小米手機怎麼下載易媒體App 瀏覽:191
還原系統設計可以怎樣清理文件夾 瀏覽:670
北京時間校準伺服器雲伺服器 瀏覽:844
pythonexcel數據計算 瀏覽:49
內醫附院黨建APP怎麼下載 瀏覽:356
榮耀v20刷加密門禁卡 瀏覽:329
app緩沖視頻怎麼保存在手機 瀏覽:433
廣度優先演算法c語言 瀏覽:680
提高程序員競爭力 瀏覽:108
nfc可以開加密門卡嗎 瀏覽:675
如何知道網頁使用的伺服器是什麼 瀏覽:224
單片機接反電源會燒嗎 瀏覽:287