編譯引數-ObjC的說明

斯人如是丶發表於2016-05-13

原文連結:http://blog.csdn.net/gaoyp/article/details/38707117

一些第三方庫裡對系統庫的類加了category

這時,就需要使用編譯引數:-ObjC,這樣第三方庫中對系統類作的擴充套件方法才能在工程中使用。


但是使用-Objc後,會產生兩個問題:

1undefined symbols 

2duplicate symbol


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

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

這個問題好解決。只要找到缺的庫,引入工程就可以了。


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

最常見的比如Reachability這個類,如果第三方庫中引用了,自己的工程中也引用了,就會報duplicate symbol

如果引用的第三方庫沒有原始碼,就只能將自己工程中的重名類重新命名了。


應對上面的問題,如果自己要製作一個庫的話,要注意兩點:

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

2、如果庫中用到了其它的第三方的原始碼,尤其是用的比較普遍的,如Reachability,一定一定要對

   這些類重新命名,最常見的作法就是給類名加個字首。以避免別人用你的庫時,產生duplicate symbol的問題。

相關文章