最近在做一個(gè)項(xiàng)目的時(shí)候,需要使用到一個(gè)第三方庫(kù),這個(gè)庫(kù)的使用向?qū)Ю锩嫣貏e說(shuō)明,在添加完該庫(kù)后,需要在Xcode的Build Settings下Other Linker Flags里面加入-ObjC標(biāo)志,這個(gè)標(biāo)志以前沒(méi)使用過(guò),所以我就專門研究了一下它的作用。
關(guān)于-ObjC
這個(gè)flag告訴鏈接器把庫(kù)中定義的Objective-C類和Category都加載進(jìn)來(lái)
這樣編譯之后的app會(huì)變大(因?yàn)榧虞d了其他的objc代碼進(jìn)來(lái))
但是如果靜態(tài)庫(kù)中有類和category的話只有加入這個(gè)flag才行
關(guān)于-all_load和-force_load
在64位ios應(yīng)用環(huán)境下,由于鏈接器的一個(gè)bug,在靜態(tài)庫(kù)中只有category沒(méi)有對(duì)應(yīng)的class定義時(shí),-ObjC標(biāo)志會(huì)失效。這時(shí)可以使用-all_load強(qiáng)制加載所有目標(biāo)文件,或者使用-force_load指定加載某一個(gè)包。
在Xcode4.2之后,這個(gè)鏈接器bug已經(jīng)被修復(fù),因此-all_load 和 -force_load標(biāo)志都不再需要了。在必要時(shí)添加-ObjC即可。