Android 程序员学习 iOS ——UIViewController 和 Layout System

in 开发 with 0 comment

Hello,通过Android程序员 如何入门iOS ——故事从这里开始 作为一个Androider 去看iOS程序的目录结构应该算有个大概的理解了,接下去我们小小介绍下和我们交道打的最多的UIViewController

什么是ViewController

Android 开发者们不会对activity有陌生的感觉吧?那么这里的UIViewController就可以理解成Android中的activityUIViewController有一个不同的地方, 就是它和某一个view是强耦合的,在逻辑上,一个UIViewController 必然带一个view(其实不带viewactivity好像也没什么价值= =)。

iOS Layout System 和 Android Layout System

我们这里需要清楚明白一点的是,iOS不像Android,带了一个layout system,它在不采用autolayout的情况下并不会自动布局,Android的一个ViewGroup的生命周期经历3个阶段,分别是

  1. measure
  2. layout
  3. draw

Android在大部分情况下,ViewGroup都会自动的为它的子view撑开足够的空间,用以正确显示View。这么智能的做法是在measurelayout中完成的。

iOS的绘图性能一直完爆Android的其中一个原因就是因为它简单的布局系统不会因为布局的复杂性增强而增加计算量。

如果不采用autolayout,那么在iOS中,所有的View有个初始化方法叫做initWithFrame: 传入一个CGRect矩形对象,矩形定义了 (x,y,width,height),这四元 不就是我们帮系统完成了一次measurelayout么? 那么iOS只用尽管draw就行了。

iOS UIViewController LifeCycle

这里不提Activity LifeCycle的原因是,ActivityLifeCycle好像和View一点关系都没有

onCreate - onStart - onResume - onPause - onStop - onDestory
这些和Activity本身有关,似乎在哪都找不到View相关的事件回调,但是在iOSUIViewController中,却有
viewWillAppear - viewDidAppear - viewWillDisappear - viewDidDisappear
好像每一个都和View有关,不愧名字为ViewController啊~

我们从Android迁移到iOS首先写UIViewController的时候,一个后遗症就是会去找ViewController的生命周期,其实不用想太多,因为iOS充分利用了gettersetter的便利性,在我们对UIViewController.view的访问过程中,会调用loadViewviewDidLoad这2个回调方法,因此,我们原先在Activity中, setContentView之后干的事情,就可以在viewDidLoad中去做了,至于ViewController是否显示消失,那么就在其它四个回调中去做我们想要做的事。

参考官方文档:https://developer.apple.com/library/prerelease/tvos/documentation/UIKit/Reference/UIViewController_Class/

总结

本文我们简单介绍了UIViewControllerActivity自身生命周期的不同和两个系统布局系统的不同,希望对大家有所帮助,由于我自己也刚刚入门iOS,写的文章可能漏洞较多,欢迎大家补充。

当然学习建议还是 多看官方文档