2013-02-18 92 views
1

我是ios編程領域的新手,使用鏈接器對於我來說只是一個全新的世界。我會盡我所能精確地解決我的問題。ios編程 - 在應用程序級別重寫靜態庫內的靜態庫

上下文:靜態庫在使用xcode的ios項目中進行鏈接。

問題:

問題成員: 3靜態庫。

libTestLibA.a

libTestLibB.a

libTestLibB_mine.a - 相同的功能libTestLibB.a - 同一類/方法的一切。

問題描述

我正在使用libTestLibA.a的應用程序。

libTestLibA有一些類依賴於libTestLibB中的某些類。因此libTestLibA.a自己編譯了libTestLibB.a。

現在,我有自己的庫名爲libTestLibB_mine。它具有與libTestLibB完全相同的功能。相同的功能相同的方法/類。我希望libTestLibA使用libTestLibB_mine而不是libTestLibB。我剛剛爲每個問題成員編譯了靜態庫(.a),即libTestLibA,libTestLibB和libTestLibB_mine。

問題

當我編譯我的應用程序,我可以強制靜態編譯庫(libTestLibA.a)以使用其他庫(libTestLibB_mine.a),而不是它已經包含(libTestLibB的。一個)?如果是,如何?如果沒有,是否有一些解決方法?

非常感謝。

回答

1

如果A已經靜態地遵守B,那麼我認爲你不能用B_mine代替B.但作爲一種解決方法,我認爲你可能在這裏尋找的是「方法Swizzling」。它的作用是在運行時用另一種方法替換類的方法(攔截消息並將其引導到其他地方)。

以下鏈接對您有用。

+0

感謝您的回覆。 Swizzling會很困難,因爲我不確定B的所有類/方法是什麼,因爲我沒有A的源代碼。 B_mine實際上只是B的一個不同版本,我希望我的應用程序通過強制A使用B_mine來使用它。 我知道libTestLibA有libTestLibB的公共頭文件和libTestLibB.a鏈接在其中。這意味着B被靜態編譯爲A? – inspi 2013-02-19 01:44:00