一些第三方庫裏對系統庫的類加了 category , spa
這時,就須要使用編譯參數: -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 的問題。