2012-10-10 20 views
1

我正在學習編程iphone,我想做一些繪圖。我遵循了一些示例代碼和子類化視圖控制器,它工作正常。現在當我想擴展這個程序時,我遇到了一個設計問題,我可以使用一些幫助。xcode使用子類中的視圖

我myviewcontroller與mynewview的子類。如果我在myviewcontroller中有任何代碼,我怎樣在mynewview中調用或引用它,反之亦然?我不確定我是否在問這個問題,但我想了解類和子類之間的關係。

回答

0

Objective-C對象受益於繼承。所有類都是NSObject的子類,因此您可以在任何對象上調用init。如果您創建了自定義類併爲其提供了方法doSomethingAwesome,那麼您可以自由地在自定義類的任何子類中實現doSomethingAwesome。但是,在子類中聲明方法不會將該方法添加到超類。順便說一句,我很少發現自己的子類唱我自己的自定義類。我相信鼓勵維護所謂的淺層對象層次結構。通常我將股票可可類子類化,根據需要進行自定義,如果我需要多個子類中的自定義方法,我將在超類上聲明一個類別,而不是依靠繼承來提供我的自定義行爲

+0

謝謝,這幫助了,我只是在正確的方向需要微調 –

0

目標中的消息傳遞系統-C是動態的。每個對象都包含一個struct,其中包含運行時用於內省的信息。在這裏,運行時會查找對象能夠響應的方法列表。所以,讓我們說你消息的情況下是這樣的:

[mynewview someMethod]; 

運行時會首先檢查對象信息,以試圖找到一些方法,這將是能夠應對的消息。如果沒有找到,那麼將查詢超類,等等。實際上,運行時間要複雜得多,並且會給任何對象更多的響應機會(這是動態的一部分,例如,mynewview可能沒有任何方法,稱爲someMethod,但可能能夠滿足呼叫,但這是某些事情你可能不想現在擔心)。

從一個子類,你可以調用父類的實現與鍵盤super一個給定的方法,因此,如果mynewviewmyviewcontroller一個子類,你可以調用myviewcontroller實現從mynewview有:

[super someMethod]; 

如果someMethod是兩者都存在於myviewcontrollermynewview中,運行時將自動只調用子實現,您必須從子實現中調用父實現(如果必須)。

+0

感謝您的快速和有用的答案。我認爲這有很大幫助 –