0

如何減少視圖控制器?有時你最終會在視圖控制器中實現很多協議,因此控制器內部有很多代碼。閱讀如何減少iOS中的視圖控制器我發現一種常見的方式是將DataSources(http://www.objc.io/issue-1/lighter-view-controllers.html)移動到其他類,但其他代表呢?或者如果您通過代碼創建視圖?首先,我想舉每位代表一個NSObject類,所以我試試這個:如何減少iOS中的視圖控制器?

self.locationManager.delegate = [[FRRYPetDescriptionViewControllerLocationDelegate alloc] init]; 

然後,我在IRC問,有人建議類,所以這是我到目前爲止:

// FRRYPetDescriptionViewController.h 
@interface FRRYPetDescriptionViewController : UIViewController 

@property (nonatomic) CLLocationManager *locationManager; 

@property (nonatomic) TPKeyboardAvoidingScrollView *scrollView; 
@property (nonatomic) UIView *contentView; 

@end 

// FRRYPetDescriptionViewController+Protocols.h 
@interface FRRYPetDescriptionViewController (Protocols) <UITextViewDelegate, UIActionSheetDelegate, MFMailComposeViewControllerDelegate, UIGestureRecognizerDelegate, MKMapViewDelegate, UIViewControllerTransitioningDelegate, CLLocationManagerDelegate> 

@end 

// FRRYPetDescriptionViewController+UIAdditions.h 
@interface FRRYPetDescriptionViewController (UIAdditions) 

- (void)createScrollView; 
- (void)createContentView; 

@end 

// FRRYPetDescriptionViewController+Callbacks.h 
@interface FRRYPetDescriptionViewController (Callbacks) 

@end 

// FRRYPetDescriptionViewController+LocationAdditions.h 
@interface FRRYPetDescriptionViewController (LocationAdditions) 

@end 

這讓我想到,「私有」方法呢?我需要聲明視圖控制器頭文件中的所有屬性嗎?你們對這種方法有什麼看法,或者有一些常見的模式需要遵循,而不是以胖控制器結束?

謝謝。

+0

選中此項:http://www.objc.io/issue-13/mvvm.html – Mateusz 2015-04-01 13:42:20

回答

1

您提到的鏈接對於體積較小的控制器編程有着美麗的解釋。但技術有點棘手,除非你是一位經驗豐富的開發人員。您在問題中詢問了多種技巧。請檢查下面他們自己的看法: -

代表 - 我個人更喜歡保持我的控制器本身委託代碼,以避免特別是當你使用相同的控制器內的多個場景的工作不需要的混亂。
以編程方式創建視圖 - 這是我們可以從UIViewController中削減大量代碼的部分。除非它是單個控件(如單個標籤或按鈕),否則我們應該創建一個自定義的UIView類,並讓它設置視圖自定義的所有常用屬性。控制器只應用必要的參數調用它。
頭文件中的屬性 - 不,數據封裝的概念說,我們只應該公開所需的變量。 Rest應該移動到私有域,以便我們的外部對象不會干擾類對象的功能。所以你應該在類擴展中聲明這些屬性(在.m文件中)。此外,並不要求將所有變量都作爲屬性,當它們是私有的時候,你可以將它們聲明爲實例變量,因爲屬性聲明除了爲該變量創建getter/setter之外什麼都不做。
私有方法 - 同樣也適用於方法。如果它不必暴露於其他物體;它不應該在頭文件中。作爲私人方法保持擴展。

相關問題