簡體   English   中英

如何在Objective-C中的視圖控制器之間共享公共方法?

[英]How do I share common methods between view controllers in Objective-C?

在我的應用程序中有許多視圖控制器,它們有自己的用途。 但是,在它們下面確實需要共同的維護工作,這些工作可以使用相同的方法代碼,而不是每個都有自己的代碼副本,字面上粘貼。

有沒有辦法分享這些常用方法的代碼? 我看到兩種可能性:

1)在方法的特殊維護對象中,在內存中真正共享的一個代碼副本

要么

2)在代碼塊中寫入一次,但每個視圖根據需要分配多次。

以下哪一條是正確的路徑或正確的路徑,以及如何以最簡單的方式實施?

善良,在房間里的新編碼器。

謝謝。

-Ric

注意:這是一個反映當時Apple實踐的舊問題/答案,並回答了一個新的編碼人員正在尋找他們能夠理解的簡單解決方案(根據問題的要求)。 使用合成 ,有更好,更可測試的方法來實現這一目標。

實現所需目標的最佳方法是為視圖控制器創建公共父類。 因此,不是直接從UIViewController繼承,而是每個自定義類都將繼承自SomeFeatureViewControllerSomeFeature描述所提供的常用功能),此類繼承自UIViewController 現在,每個實際的視圖控制器都將繼承自SomeFeatureViewController並且任何常用方法(也可以是這些方法使用的任何常見實例變量)都可以放在此父類中。

@interface SomeFeatureViewController : UIViewController
{
    int common_iVars;
}
- (void)commonMethods;
@end

@interface ActualViewController : SomeFeatureViewController
{
    int specific_iVars;
}
- (void)specificMethods;
@end

正如jhabbott所說,UIViewController的子類是一個很好的解決方案。

如果這不是一個選項(例如,你不能改變類層次結構),另一個選擇是在UIViewController上創建一個類別來添加你需要的方法和屬性。 這將使您的方法在每個UIViewController上都可用,包括所有標准子類,而無需您做任何額外的工作。 使用此解決方案,您無法直接添加ivars,盡管您可以使用關聯引用將其偽裝得足夠好。

好吧,我最終做的是創建一個Singleton對象並將所有常用方法放在那里。 這意味着我的所有View控制器都可以使用Singleton的常用方法。 如果項目是由程序員團隊開發的話,這可能有點過於開放,但正如我所知,所有控制器在處理方面都有類似的要求。 所以Singleton方法似乎有效。

它也適合項目,因為在問題發生時所有的View控制器都已創建並使它們成為父類的子類似乎是一種改進,盡管我同意如果是初始設計的一部分,它可能是一個更好的方法。 我真的感謝有時間回答的3。

我看到它的方式你應該用所有常用方法做一個類,然后繼承它。 假設你有MyCommonViewController:UIViewController然后為每個不同的視圖控制器做MySpecificVIewController:MyCommonViewController

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM