国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Xcode里-ObjC,-all_load,-force_load

2019-11-14 20:38:34
字體:
來源:轉載
供稿:網友

最近在做一個項目的時候,需要使用到一個第三方庫,這個庫的使用向導里面特別說明,在添加完該庫后,需要在Xcode的Build Settings下Other Linker Flags里面加入-ObjC標志,這個標志以前沒使用過,所以我就專門研究了一下它的作用。

 

之所以使用該標志,和Objective-C的一個重要特性:類別(category)有關。根據這里的解釋,Unix的標準靜態庫實現和Objective-C的動態特性之間有一些沖突:Objective-C沒有為每個函數(或者方法)定義鏈接符號,它只為每個類創建鏈接符號。這樣當在一個靜態庫中使用類別來擴展已有類的時候,鏈接器不知道如何把類原有的方法和類別中的方法整合起來,就會導致你調用類別中的方法時,出現"selector not recognized",也就是找不到方法定義的錯誤。為了解決這個問題,引入了-ObjC標志,它的作用就是將靜態庫中所有的和對象相關的文件都加載進來。

 

本來這樣就可以解決問題了,不過在64位的Mac系統或者iOS系統下,鏈接器有一個bug,會導致只包含有類別的靜態庫無法使用-ObjC標志來加載文件。變通方法是使用-all_load 或者-force_load標志,它們的作用都是加載靜態庫中所有文件,不過all_load作用于所有的庫,而-force_load后面必須要指定具體的文件。

 

明白了這些,我就清楚,這個第三方庫中一定是定義了一些類別來擴著已有類,打開頭文件,發現果然如此。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 敦煌市| 江城| 海伦市| 钟祥市| 安化县| 恭城| 什邡市| 鹤峰县| 鄂温| 唐山市| 河南省| 丰都县| 斗六市| 革吉县| 安陆市| 葫芦岛市| 岳西县| 金溪县| 教育| 安乡县| 深泽县| 微山县| 黄平县| 新安县| 从江县| 天镇县| 屏南县| 濉溪县| 宜阳县| 祁东县| 萨嘎县| 安乡县| 双城市| 新竹市| 莎车县| 于都县| 栖霞市| 栖霞市| 周宁县| 建昌县| 卢龙县|