VC中的分段注释(#pragma mark -)(在Swift中为//MARK:)
- init and dealloc
- View Lifecycle
- Setup
- Public Methods(控制器类.h中声明的方法)
- Events, Callbacks (触摸事件,通知,定时器事件,其他的注册事件等)
- Delegate, Datasource
- Private Methods
- 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
- 初始化以及创建一些轻量级的属性(生命周期和控制器生命周期一致)。
- 将轻量级的业务模型对象的构建(生命周期和控制器生命周期一致)。
-
loadView
- 如果视图通过StoryBoard或者XIB文件创建,则不需要这部分代码。
- 纯代码布局时重载该方法,并在这里完成所有视图的构建和布局。
- 如果想复用默认的根视图作为自己的根视图,那么在构建自己的其他子视图之前调用基类的
loadView
。如果想完全构建自己的根视图以及子视图体系,那么就没必要调用基类方法。
-
viewDidLoad
- 业务逻辑的初始化。
- 业务模型服务接口的初始请求。
- 控件的事件处理绑定的动作。
- 设置delegate和datasource。
-
viewWill/DidAppear, viewWill/DidDisappear
- 定时器的添加
- 通知观察者的添加和销毁处理
3.而在viewWillDisappear:这样的方法中,则适合于使用-removeObserver:name:object:
方法,以避免不知情的情况下移除了不应该移除的通知观察者
-
dealloc
- 一般情况下不需要添加特殊代码
- 将各控件视图中的
delegate
和dataSource
设置为nil
3.–removeObserver:
适合于在类的dealloc方法中调用,这样可以确保将对象从通知中心中清除