Views不总是会拥有一个View Controller
在应用中,几乎没有View和View Controller一一对应的时候。View Controller的作用是管理一个view hierarchy(通常由一系列view组成,用来实现某些feature)。对于iPhone应用,每个view hierarchy通常会填满整个屏幕,但是对于iPad应用,它只填充部分屏幕。
在设计应用的UI时,考虑view controller所扮演的角色是非常重要的。view controller提供了许多重要的行为,比如协调屏幕上多个view的呈现,协调这些views的移除,在low-memory警告时释放内存,根据interface朝向的变化旋转view。
Minimize Custom Drawing
尽管自定义的drawing有时候是需要的,但还是要尽可能避免。只有当前系统的view类不满足需要时,才进行自定义。
利用好Content Modes
Content Modes能够最小化redraw view带来的时间开销。默认情况下,views使用UIViewContentModeScaleToFill 模式,将view的内容调整到适合view frame的大小。通过改变mode来达到想要的效果,但是应该避免使用UIViewContentModeRedraw。不论哪种mode已经生效,你都可以通过setNeedsDisplay和setNeedsDisplayInRect来强制view进行redraw。
尽可能将view声明为Opaque
UIKit使用opaque属性来决定view是否可以优化合成操作。将opaque设置成YES会告诉UIKit,它不需要渲染view后的任何内容。减少渲染可以极大的提升drawing的性能。
当滚动时调整View的drawing行为
滚动在短时间内会触动大量的view更新。如果view的draw code优化的不好,滚动的性能会很差。在滚动过程中没有必要始终保持view的内容是崭新的。例如,在滚动过程中,可以暂时减少渲染内容的质量或者修改content mode,当滚动停止时,再将view返回到先前状态,更新所需的内容。
不要通过嵌入subview来自定义control
尽管在技术上,向系统的标准controls(继承于UIControl的对象)添加视图是可行的,但你应该永远不要这么做。支持自定义的Control通过标准文档的接口在类中已经说明了。例如,UIButton类包含了可以设置title和background的方法。使用定义好的方法意味着代码会正确执行。规避这些方法,嵌入一些自省一的图片和label会导致应用行为出错。