編譯參數-ObjC的說明

一些第三方庫裏對系統庫的類加了 categoryspa

這時,就須要使用編譯參數: -ObjC ,這樣第三方庫中對系統類做的擴展方法才能在工程中使用。 it

可是使用 -Objc 後,會產生兩個問題: 編譯

1 undefined symbols  class

2 duplicate symbol 擴展

undefined symbols 說明工程中沒有引入第三方庫引用的庫。 引用

若是不加 -ObjC 參數,則在編譯時不會出錯,但運行時用到了沒引用庫的方法,則系統會崩潰。 方法

這個問題好解決。只要找到缺的庫,引入工程就能夠了。命名

duplicate symbol 的問題就很差解決了,說明第三方庫中的類名和工程中的類名,或其它第三方庫中的類名重名了。 di

最多見的好比 Reachability 這個類,若是第三方庫中引用了,本身的工程中也引用了,就會報 duplicate symbol源代碼

若是引用的第三方庫沒有源代碼,就只能將本身工程中的重名類重命名了。

應對上面的問題,若是本身要製做一個庫的話,要注意兩點:

1 、避免對系統類加 category, 這樣,別人用你的庫時,不加 ObjC 參數也能夠用你的庫。

2 、若是庫中用到了其它的第三方的源代碼,尤爲是用的比較廣泛的,如 Reachability, 必定必定要對

這些類重命名,最多見的做法就是給類名加個前綴。以免別人用你的庫時,產生 duplicate symbol 的問題。

相關文章
相關標籤/搜索