我正在爲令人討厭的傳統C庫構建一個Objective-C包裝器。假設我有兩個Objective-C類A和B包裝一些相關的遺留結構。現在我想提供一個函數,將A類的給定對象轉換爲B類對象。問題是,轉換過程破壞了源對象的內部狀態。Objective C命名機制保留/釋放
什麼是實現此標準Objective-C命名約定的轉換函數的最佳解決方案。即應該很清楚轉換函數將在給定的源對象上執行版本。
我正在爲令人討厭的傳統C庫構建一個Objective-C包裝器。假設我有兩個Objective-C類A和B包裝一些相關的遺留結構。現在我想提供一個函數,將A類的給定對象轉換爲B類對象。問題是,轉換過程破壞了源對象的內部狀態。Objective C命名機制保留/釋放
什麼是實現此標準Objective-C命名約定的轉換函數的最佳解決方案。即應該很清楚轉換函數將在給定的源對象上執行版本。
不要問一個名字,也許你應該問一些關於如何在不破壞源對象狀態的情況下進行轉換過程的策略。我無法想象任何一種C數據都不能僅僅通過memcpy
'來到一個新的位置。如果在轉換之前重複數據,將會爲您解決此問題,我會搗鼓這樣做。
我相信釋放源並不是一個好主意。 你爲什麼不復制你的源代碼並釋放它(如果這是必要的)。 在這種情況下,你可以稱爲你的方法
MyObjectB * b = [MyObjectB bFromA:(MyObjectA *)a];
或
MyObjectB * B = [[MyObjectB的alloc] initFromA:(MyObjectA *)A];
我猜;)
有沒有這樣的命名約定。我在標準API中看到的所有Objective-C方法/函數要麼複製它們的源代碼,要麼保持原始源代碼不變,要麼使用原始代碼,但不要將其摧毀。
確實存在的命名約定仍然存在,請求調用者是否應釋放新的對象。
「結構」是一個相當複雜的一組帶有指針引用的對象。重複是可能的,但或多或少「昂貴」。同樣在大多數情況下,源代碼對象在轉換後將被銷燬。 但是。看來我必須這樣。 – Halbanonym 2010-07-15 17:26:59
好吧,你是對的!無論如何,它無法從單個A對象創建多個B對象,同時其狀態隨時間變化而無法實現。內部重複是解決整個問題的最佳途徑。 – Halbanonym 2010-07-15 17:36:40