如果我們包含任何外部庫或框架,我們在Xcode的項目設置的其他鏈接器標誌中包含「-ObjC」,任何人都可以告訴我它是什麼原因以及它做了什麼如果我們包括它。在Xcode中包含「-ObjC」的原因
在此先感謝..
如果我們包含任何外部庫或框架,我們在Xcode的項目設置的其他鏈接器標誌中包含「-ObjC」,任何人都可以告訴我它是什麼原因以及它做了什麼如果我們包括它。在Xcode中包含「-ObjC」的原因
在此先感謝..
它在Apple's QA1490解釋得很好。
密鑰摘錄:
目的-C不爲每個功能定義(或 方法,在Objective-C)連接基的符號 - 相反,接頭符號僅產生 爲每個類。
...
要解決此問題,鏈接到的靜態庫 目標必須通過-ObjC選項鍊接。該標誌將導致接頭 加載每個對象文件中,定義一個Objective-C 類或類別
-ObjC
接頭標誌導致接頭加載曾經在限定一個Objective-C庫對象文件庫類或類別。
類別是最知名的用例這個標誌(如蘋果公司的QA1490解釋),但它們不是爲什麼需要這個標誌的唯一原因。
由於Objective-C是一種動態語言,它使NSClassFromString()
等事情成爲可能,所以只包含實際使用的符號的C鏈接器的標準行爲(並丟棄所有其他符號)不起作用,因爲無法找出是否某些符號實際上以間接方式使用,如連接字符串,然後調用NSSelectorFromString
或NSClassFromString
。
例如,考慮xib/nib文件:它們不參與鏈接階段,但它們可以實例化除了這個nib文件之外不被任何東西引用的庫類。如果鏈接器將這些類丟棄爲未使用,則筆尖無法加載並正常工作。
確保沒有任何東西丟失的唯一方法是在鏈接時從庫中包含每個Obj-C類,並且此標誌可以實現這一點。
-ObjC是一個鏈接器標誌,用於編譯以本地代碼編寫的源文件,例如C++ – user2071152
-ObjC加載實現Objective-C類或類別的靜態歸檔庫的所有成員。 – Shruti