你们如何减少你的视图控制器?有时你最终在视图控制器中实现了很多协议,所以控制器本身里面有很多代码。阅读有关如何在iOS中减少视图控制器的问题我发现一种常见的方法是将DataSources(http://www.objc.io/issue-1/lighter-view-controllers.html)移动到其他类,但是其他代理呢?或者如果您通过代码创建视图?首先,我考虑将每个委托移动到NSObject类,所以我试试这个:
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 :(得分:1)
您所提到的链接对于体积较小的控制器编程有很好的解释。但是技术有点棘手,除非你是一个经验丰富的开发人员。您在问题中询问过多种技巧。请在下面查看我的观点: -
代表 - 我个人更喜欢将代理代码保留在控制器本身,以避免在同一控制器中处理多个方案时出现意外混淆。
以编程方式创建视图 - 这是我们可以从UIViewController中删除大量代码的部分。除非它是单个控件(如单个标签或按钮),否则我们应该创建一个自定义的UIView类,并让它设置视图自定义的所有常用属性。控制器只应使用必要的参数调用它
头文件中的属性 - 不,数据封装的概念说我们应该只公开那些必需的变量。 Rest应移至私有域,以便外部对象不会干扰类对象功能。所以你应该在类扩展中声明这些属性(在.m文件中)。此外,不需要将所有变量都作为属性,当它们是私有时,您可以将它们声明为实例变量,因为属性声明除了为该变量创建getter / setter之外什么也不做。
隐私方法 - 同样适用于方法。如果不必暴露于其他物体;它不应该在头文件中。将其作为私人方法保留在扩展中。