View Controller 视图管理总结

导语
作者:rhycio来自:http://rhycio.com/ios/view-controller-view-management/Viewcontroller是iOS中顶层的视图载体和控制器,它必要对view负责,管理view的生命周期,相干处室话以及交互变乱,除此以外还必要为view ...


作者:rhycio来自:http://rhycio.com/ios/view-controller-view-management/

View controller是iOS中顶层的视图载体和控制器,它必要对view负责,管理view的生命周期,相干处室话以及交互变乱,除此以外还必要为view提供符合的数据,以供view利用。

View controller与view之间的绑定是非常密切的,它也一样到场变乱的相应,并管理变乱。对于这点,我们可以观察UIViewController的继续布局:

NSObject->UIResponder->UIViewController

从中我们可以看出view controller是一个UIResponder对象,它在变乱相应链中,处在view controller的root view以及view的superview之间。假如view controller中的views没有控制某个变乱,那么view controller会将该变乱沿着相应链通报给superview.

每个view controller都会管理view的条理布局。View controller的root view则生存在view属性中,而root view相称于view条理布局中的容器。

对于root view而言,它的size和position是由它的父级布局决定,好比说某个parent view controller,container view controller大概app的window。

管理视图

view的创建

在view controller中,有以下几种方法创建root view:

通过storyboard文件来创建。通过nib文件来创建。通过loadView方法来创建。

在view controller构建view的过程中,view controller起首查抄是否有指定的nib文件(此中storyboard也会提供nib文件)。 假如有,那么view controller通过nib文件举行创建。假如没有,那么view controller会查抄loadView是否有创建。假如loadView也没有那么view controller则会主动天生一个默认view来利用。

不外这里必要留意,当已经通过nib文件大概storyboard创建view的时间,请不要再重载loadView方法。

假如非要重载,可以这么实现,但是不保举:

- (void)loadView {  [super loadView];  <#code#>}

view与惰性加载

在view controller中,view的创建接纳的是惰性加载的方式。即当view被引用的时间,view才会被创建。好比说将view添加到某个视图条理布局中的时间,再好比以下的环境:

UIViewController *vc = [UIViewController new];vc.view.backgroundColor = [UIColor redColor];

像如许的直接引用view,也可以触发view的创建。

除此以外还可以通过loadViewIfNeeded自动触发view的创建。

假如我只想判定当前的view是否存在而不必要触发view的创建,那改怎么做呢? 可以通过isViewLoaded举行判定。

直接给view赋值

那么除了通例的创建以外,view controller的view可以直接被赋值么? 答案是可以的。

UIViewController *vc = [UIViewController new];UIView *myView = [UIView new];myView.backgroundColor = [UIColor yellowColor];vc.view = myView;

awakeFromNib方法

当view controller通过nib文件加载后,那么就会调用这个方法。

这个方法可以包管,outlets和actions已经被精确的毗连。 但是并没有对于nib中创建对象的次序作出包管,因此请不要在awakeFromNib时间点之前利用这些对象(好比说初始化方法)。

你可以通过重载awakeFromNib方法,来完成对对象的一些额外的设置,但要留意,请肯定要在awakeFromNib方法中调用其父类的方法。

重载loadView

loadView的重要职责在于创建view controller的root view。它可以通过nib文件以及代码举行创建。假如你必要用代码自界说创建一个root view,那么必要重载这个方法,不外你要确保,你所创建的这个view有且仅有当前view controller才气持有。 不外要留意,在重载的时间,不可以或许调用[super loadView]。

- (void)loadView {  UIView *view = [UIView new];  view.frame = [UIScreen mainScreen].bounds;  view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;  self.view = view;}

viewDidLoad方法

岂论view是通过nib文件创建照旧通过loadView自界说创建,在viewDidLoad函数中,它都可以确保view controller的view是肯定存在的。 以是可以在这个方法做一些关于view的额外的设置。好比说添加额外的subview等等。

view的开释

任何时间你都应该确保,view controller是view的唯一管理者,假如当前的view被别的的对象引用了,那么view controller的管理便则有大概被限定。

在view controller的生命周期中,view是可以被开释的。固然如许的做法并不广泛,一样平常会在内存告急的时间,举行对view的开释。

- (void)didReceiveMemoryWarning {  [super didReceiveMemoryWarning];  if ([self isViewLoaded] && self.view.window == nil) {    self.view = nil;    NSLog(@"view ==> %@", [self viewIfLoaded]);  } }

相应视图相干的关照

当views的表现状态改变了的时间,view controller会主动给予关照。

viewWillAppear:

在view被添加到视图条理布局之前调用。

可以在这期间为view预备数据,调解status bar等。

viewDidAppear:

在view被添加到视图条理布局之后调用。

viewWillDisapper:

在view被移除视图条理布局之前调用。

这时间可以做一些清算工作,好比一些可以易于重新天生的数据。

viewDidDisappear:

在view移除视图条理布局之后调用。




《北京人资》,作为一个小众的人力资源社区,自成以来一直默默的为数以万计的HR从业者提供着专业支持和生活帮助并见证着彼此的成长。北京人资在秉承有趣、有料、链接、共享的理念创建者我们的平台并等待您的加入。如果你是一个活泼、严肃、积极、有趣并一直在寻找同类人群的HR,请扫描下面的二维码,加入到我们中来吧,和我们一起,快乐链接,幸福成长。北京人资网 www.bjrz.net
返回顶部