2013-07-27 58 views
0

我有一個名爲ViewController的類。如何讓這個類是「metaiosdkViewController」和「JWslideViewController」的子類。幫助我的語法。 我寫這樣如何創建兩個類的子類

@interface ViewController : MetaioSDKViewController,JWslideViewController 

但是這給了我錯誤

+0

它應該是錯誤的。目標C – uchuugaka

回答

1

是Objective-C的犯規支持多重繼承,但是你可以給一個家長這樣

@interface ViewController : MetaioSDKViewController 

@interface MetaioSDKViewController : JWslideViewController 

這只是一個想法,我知道你可以根據自己的需要

4

的Objective-C不支持多重繼承,但如果你想添加一些額外的行爲就可以通過委託實現它..

+0

中沒有多重繼承可以幫助您獲得任何鏈接或代碼.. – datha

+0

http://mobile.tutsplus.com/tutorials/iphone/ios-sdk-custom-delegates/ – RKY

+2

他們不叫「代表」,而是「協議」。 – 2013-07-27 06:47:08

1

它是什麼,你要實現多重繼承落實好? 你想重寫每個這些超類的方法嗎? 注意,目標C提供2個機制的可擴展性:

1)實現一個協議,使你的對象委託:

@interface ViewController : <MetaioSDKViewController,JWslideViewController> 

這加強ViewController如通過2名代表在合同定義爲實現某些方法,並且在處理的某個時刻,他們會被叫到。如果你沒有實現它們,它們可能根本不會被調用,但你可能無法獲得所需的功能。

例如:UITableViewDataSource協議定義了子類實現的許多方法。 cellForRowAtindexPath是您自己的表視圖子類必須實現以繪製您自己的自定義單元格的委託方法的非常有名的示例。

請注意,這不是子類在一般意義上提供的可擴展類型。你的班級在這裏沒有擴展任何功能。相反,它變成了它所說的 - 代表 - 被分配去完成某項任務的人。像你這樣的:

yourTableView.delegate = self; //tell self to be the delegate of yourTableview 

庫代碼做它的東西,並在處理某些時候它調用[delegate someMethod]。如果你自己的類實現它,它會調用它,否則delegate將是零,它可能只是沒有OP,並且你沒有得到所需的功能。同樣,這是依賴於實現的。也許這個協議定義了這個方法是強制性的,在這種情況下,你的類必須實現這個方法才能編譯。

2)實施分類:

這是排序的快捷方式來擴展庫類。它們像一個額外的存根,當你的代碼運行時,它將自己附加到庫對象的已經存在的存儲器佈局,並提供額外的功能。

您也可以在任何內置類中定義一個類別。實際上這是它用於的主要目標。例如,here是提供HTML轉換的NSString類別。有數百個類別作爲開源實施,並且在庫代碼不足的情況下它們提供了巨大的優勢。然而,討論它們的整體適用性不在本討論的範圍內。

但需要注意的一件事是:您不要覆蓋任何使用類別。而是你提供額外的東西。例如,如果您希望在所有應用視圖中進行一些自定義繪圖,則可以在項目中的UIView上定義一個類別,然後所有視圖都可以包含類別頭文件。你甚至不必從這個類繼承,你只需從基類繼承。

例如在上面的NSString類別示例中,您不必將NSString定義爲NSString + HTML類型。相反,只需將NSString+HTML.h文件包含在任何需要額外方法(如stringByConvertingHTMLToPlainText等)的文件中。所做的更改僅限於您的項目 - 包含此類別的文件。

類別不提供額外的數據成員 - 這是隻有繼承才能提供的。然而,視圖控制器之間的多重繼承是你應該重新考慮的次數 - 你會發現你正在尋找的不是多重繼承。

相關問題