在建立本身的靜態庫時引入afn3.x,真機調試的時候遇到了這個問題ios
解決方法:spa
在Xcode工程的Other linker flags中添加-ObjC 標誌調試
-------------code
在Objective-C中,因爲方法調用都是在運行期肯定的,所以沒有針對方法的symbol,只有針對類的。ip
這樣在靜態庫中若是使用了category擴展已有的類,編譯器不知道如何將category和已有的類整合在一塊兒,就會致使unrecognized selector問題。添加-ObjC標誌後,編譯器會把一個類相關的全部目標文件都加載,這樣就解決了這個問題。可是因爲這樣作會使可執行文件體積變大,因此沒有設爲默認選項。編譯器
在64位ios應用環境下,因爲連接器的一個bug,在靜態庫中只有category沒有對應的class定義時,-ObjC標誌會失效。這時可使用-all_load強制加載全部目標文件,或者使用-force_load指定加載某一個包。io
在Xcode4.2以後,這個連接器bug已經被修復,所以-all_load 和 -force_load標誌都再也不須要了。在必要時添加-ObjC便可。編譯
-----------class
在引入第三方靜態庫的時候有時候也會出現這種問題:擴展
此時 進入這個.a文件所在的目錄,在終端使用 lipo -info xxx.a 看看這些靜態文件是否支持64位,若是是不支持64位的能夠下載一個最新的支持 64位的三方庫.