2011-03-22 98 views
1

在我的程序中,我有一個名爲Object的類,它繼承自UIView。我也有其他的對象叫做:從Object繼承的圓形,方形,三角形。UIView/UIImageView繼承

我的問題是,我想做一個可能的對象稱爲圖像,它也從Object繼承。我希望屏幕上的所有對象都從Object繼承,然後將NSArray指針傳遞給包含屏幕上所有對象的物理函數。

什麼是使我的圖像對象獲得我的對象類的所有屬性的最佳方式是什麼?

我應該爲我的Image對象創建新的屬性,還是有辦法繼承Object並仍然能夠顯示圖像,因爲Object從UIView繼承而不是UIImageView。

回答

1

這是一個非常不尋常的方式來做到這一點。你有沒有任何Java經驗?

你想用形狀做什麼?你是否試圖在他們各自的課堂中繪製它們?在這裏,你正在模糊MVC的界限。從看起來,你的圓形,方形等類都是模型和視圖,不應該發生。如果您正在嘗試繪製形狀,則不會爲它們創建類 - 您將使用Quartz drawing methods在視圖控制器視圖中繪製它們。如果您試圖存儲有關這些形狀的信息,那麼您不希望它們從UIView繼承。 NSObject(或自定義Shape類)將是更好的選擇。 (調用類「Object」也是一個壞主意 - 它可能會與NSObject混淆)。

你是第二段是我的第一個問題來自哪裏。你的NSArray不是而是必須包含相同類型的變量 - 這與Java的數組(和其他語言,如C#和C)非常不同。因此,除非你想要繼承某些方法或ivars,否則沒有理由聲明Object類。

至於顯示圖像,你打算如何處理圖像?如果你只是想顯示圖像(一個視圖),然後使其成爲UIImageView(它是UIView的子類)的子類。如果你想存儲關於圖像的信息,使它成爲Shape的子類(或者在這種情況下,你的對象)。然而,你真的不能做你想做的事(從Object和UIImageView繼承),因爲你不應該組合視圖和模型的功能。

真的,你最好的選擇是重溫你的類,讓他們堅持MVC,並重新思考你的繼承鏈。希望這可以幫助!

1

最簡單的事情是讓Image繼承Object,然後讓Image擁有UIImageView類型的子視圖。

+0

這就是我正在尋找的,它並沒有跨越我的想法這樣做,謝謝。 – Dalisto1 2011-03-22 20:59:55

2

你已經意識到一個類不能擴展兩個父類。

您的「對象」可以是協議而不是類?這樣,圓形,方形和圖像都可以實現該協議,同時根據需要擴展UIView或UIImageView?

+0

這也是一個好主意。要問的問題是:你的Object類是否需要存儲實例變量?如果Object只提供方法來調用,那麼它可以被製成一個協議。如果它必須存儲每個對象的數據,那麼它不能是一個協議。 – Vagrant 2011-03-22 21:01:51