视图控制器的代码布局

VC中的分段注释(#pragma mark -)(在Swift中为//MARK:)

  1. init and dealloc
  2. View Lifecycle
  3. Setup
  4. Public Methods(控制器类.h中声明的方法)
  5. Events, Callbacks (触摸事件,通知,定时器事件,其他的注册事件等)
  6. Delegate, Datasource
  7. Private Methods
  8. LazyLoad, Getter, Setter
//关于private methods,正常情况下ViewController
//里面不应该写
//不是delegate方法的,不是event response方法的,
//不是life cycle方法的,就是private method了

对的,正常情况下ViewController里面一般是不会存在private methods的,这个private methods一般是用于日期换算、图片裁剪啥的这种小功能。这种小功能要么把它写成一个category,要么把他做成一个模块,哪怕这个模块只有一个函数也行。

ViewController基本上是大部分业务的载体,本身代码已经相当复杂,所以跟业务关联不大的东西能不放在ViewController里面就不要放。另外一点,这个private method的功能这时候只是你用得到,但是将来说不定别的地方也会用到,一开始就独立出来,有利于将来的代码复用。

VC中属性的布局

  • 如果控制器中的属性和成员变量只在本类中使用,就应该将其定义在.m文件中。
  • 控制器中定义子控件视图时,属性最好是weak
  • 对于用拥有可变子类的对象,应将其声明为copy
  • 视图对象属性在最上面,控制器本地属性放中间,模型对象属性放最下面。

不同代码的构建时期

  • init

    1. 初始化以及创建一些轻量级的属性(生命周期和控制器生命周期一致)。
    2. 将轻量级的业务模型对象的构建(生命周期和控制器生命周期一致)。
  • loadView

    1. 如果视图通过StoryBoard或者XIB文件创建,则不需要这部分代码。
    2. 纯代码布局时重载该方法,并在这里完成所有视图的构建和布局。
    3. 如果想复用默认的根视图作为自己的根视图,那么在构建自己的其他子视图之前调用基类的loadView。如果想完全构建自己的根视图以及子视图体系,那么就没必要调用基类方法。
  • viewDidLoad

    1. 业务逻辑的初始化。
    2. 业务模型服务接口的初始请求。
    3. 控件的事件处理绑定的动作。
    4. 设置delegate和datasource。
  • viewWill/DidAppear, viewWill/DidDisappear

    1. 定时器的添加
    2. 通知观察者的添加和销毁处理
      3.而在viewWillDisappear:这样的方法中,则适合于使用-removeObserver:name:object:方法,以避免不知情的情况下移除了不应该移除的通知观察者
  • dealloc

    1. 一般情况下不需要添加特殊代码
    2. 将各控件视图中的delegatedataSource设置为nil
      3.–removeObserver:适合于在类的dealloc方法中调用,这样可以确保将对象从通知中心中清除

你可能感兴趣的:(视图控制器的代码布局)