2010-01-08 53 views
6

The Objective-C Runtime Reference說:Objective-C運行

「過時」下面是指「不推薦使用在Mac OS X 10.5版本爲32位代碼,和不允許爲64位代碼。」

我想在Max OS X 10.5版本中使用class_setSuperclass,儘管我仍然可以做到這一點,編譯器給出了警告,告訴我它的不推薦使用,但它仍然可以編譯並且Bundle仍然可用。

我的問題是Max OS X 10.5中的等價物是什麼?

+0

jajaja至少有文檔記錄:*「**特殊注意事項**你不應該使用這個函數」* – OscarRyz 2010-01-08 22:32:17

+4

你想用什麼目的'class_setSuperclass'?根據這一點,人們可以不使用'class_setSuperclass'來建議其他解決方案。 – Yuji 2010-01-08 23:08:31

+0

我使用class_setSuperclass的理由是編寫一個修補程序來修復10.5下的Microsoft Entourage中的某些問題,而不是像Apple Mail那樣顯示HTML,補丁是指一個SIMBL插件。 – fernyb 2010-01-09 08:05:53

回答

5

在猜測使用它可能不是一個好主意。我知道隨着向64位的轉變,運行系統中的幾件事情發生了變化,並且沒有替代品。

該文檔甚至明確表示不接觸,並且不會例外。

然而,您可以使用class_addMethod向給定的預先存在的類添加功能。但是,這也可以通過類別來實現。

您也可以使用class_replaceMethod重寫一個方法,另一種可能的方法是使用一個類別(或class_addMethod)添加替換方法。然後使用method_exchangeImplementations,您可以交換它們,以使原始的通話仍然可用。

一般來說,雖然大部分這是有點烏黑的巫術,並且除非你願意並且願意測試很多,我會尋找替代設計。

+1

而不是使用class_setSuperclass和swizzle方法,我將使用class_addMethod然後調整。 – fernyb 2010-01-09 08:11:26

1

可能沒有直接的等價物。

我知道每次在運行時玩過類層次結構我都被燒燬了。你應該能夠達到同樣的結果,儘管通過委託可以更加詳細地說明,我可以想象那就是他們想要的。