面试题总结

UIViewController生命周期

当一个视图控制器被创建,代码的执行顺序如下

1
- (void)loadView;  
这是子类创建自定义视图层次结构的地方,如果重写了这个方法,
则控制器的view按照loadView方法的描述去创建

2
- (void)viewDidLoad;
在视图加载后调用。只调用一次! 所以只能用来做初始设置,载入各种初始数据内容

3
- (void)viewWillAppear:(BOOL)animated;
在视图即将显示时调用。该函数可以被多次调用  
通常我们会利用这个方法,对即将显示的视图做进一步的设置。
例如,我们可以利用这个方法来设置设备不同方向时该如何显示。

或者当APP有多个视图时,视图间切换时viewDidLoad方法不会被调用,
如果在调入视图时,需要对数据做更新,就可以在这个方法内实现了。

4
- (void)viewDidAppear:(BOOL)animated; 
当视图完全显示到屏幕上时调用

5
- (void)viewWillDisappear:(BOOL)animated; 
当视图将要被关闭,覆盖或以其他方式隐藏时调用。

6
- (void)viewDidDisappear:(BOOL)animated;  
当视图已经被关闭,覆盖或以其他方式隐藏时调用
UIViewController生命周期补充点

- (void)viewWillLayoutSubviews; 
在视图控制器的视图的layoutSubviews方法被调用之后调用。布局发生变化之前
#init初始化不会触发layoutSubviews
#addSubview会触发layoutSubviews
  设置view的Frame会触发layoutSubviews,当然前提 是frame的值设置前后发生了变化
  滚动一个UIScrollView会触发layoutSubviews
  旋转Screen会触发父UIView上的layoutSubviews事件
  改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件

- (void)viewDidLayoutSubviews;
在视图控制器的视图的layoutSubviews方法被调用之后调用。布局变化之后

#控制器还有三个需要注意的方法
'viewWillUnload' \ 'viewDidUnload' \ 'didReceiveMemoryWarning'
当程序内存不够用时,最先拿到内存警告的是
UIApplication-Window-window.rootViewController一层层往下传
当控制器收到内存警告时,如果要确定要销毁view,则会调用viewWillUnload\viewDidUnload

当控制器销毁后,又需要显示,则控制器会调用loadView,又一步一步开始走一遍

SVN 和 GIT 的区别

Apache Subversion(简称SVN),一個开放源代码的版本控制系統,相较于RCS 、CVS,它採用了分支管理系統,它的設計目標就是取代CVS。

GIT 是一个分布式版本控制软件,最初由林纳斯·托瓦兹(Linus Torvalds)创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。

1. 最核心的区别GIT属于分布式的版本控制系统,而SVN属于集中式的版本控制系统。

SVN - 集中式版本控制系统
●每个版本库有唯一一个“官方地址”,每个用户都从这个唯一地址获取代码、数据;
●获取代码库的更新,也只能连接到这个唯一的代码库,同步以取得最新数据;
●提交必须有网络连接(非本地版本库);
●提交需要授权,如果没有授权,提交失败;
●提交并非每次都能够成功。如果有其他人先于你提交,会提示“改动基于过时的版本,先更新再提交”… 诸如此类;

GIT - 分布式版本控制系统
●众生平等,每个检出(checkout)的版本库,或者更准确的说每个克隆(clone)的版本库都是平等的;
●你可以从任何一个版本库的克隆来创建属于你自己的版本库,同时你的版本库也可以作为源提供给他人,只要你愿意;
●提交完全在本地完成。无须别人给你授权,你的版本库你作主;
●提交总是会成功,因为提交是在本地进行的么;
●甚至基于旧版本的改动也可以成功提交,提交会基于旧的版本创建一个新的分支 ;
●冲突解决不再像是SVN一样的提交竞赛,而是在需要的时候才进行合并和冲突解决 ;
● GIT 的每个用户就好像工作在独立的 Feature Branch(功能分支)中 ;
● GIT 的提交不会被打断,直到你的工作完全满意了,PUSH给他人或者他人PULL你的版本库;
●合并会发生在PULL和PUSH过程中,不能自动解决的冲突会提示您手工完成;
● GIT 版本库统一放在服务器中,所有人都和服务器同步,提交直接到服务器上;
●可以为 GIT 版本库进行授权:谁能创建版本库,谁能向版本库PUSH,谁能够读取(克隆)版本库;
●团队的成员先将服务器的版本库克隆到本地;并经常的从服务器的版本库拉(PULL)最新的更新;
●团队的成员将自己的改动推(PUSH)到服务器的版本库中,当其他人和版本库同步(PULL)时,会自动获取改变;
● GIT 的集中式工作模式非常灵活;
●你完全可以在脱离Git服务器所在网络的情况下,如移动办公/出差时,照常使用代码库;
●你只需要在能够接入Git服务器所在网络时,PULL和PUSH即可完成和服务器同步以及提交;
● GIT提供rebase命令,可以让你的改动看起来是基于最新的代码实现的改动;

简单地说 GIT 就是每一个开发人员的电脑上都有一个完整库,即使没有网络也一样可以Commit,查看历史版本记录,创建项 目分支等操作,网络可用时直接Push到Server端 , 就相当于合并 !
SVN就只有唯一一个中心版本库, 需要网络才能正常使用.而且合并分支很麻烦!

2. GIT把内容按元数据方式存储,而SVN是按文件。

GIT目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。.git目录的体积大小跟.svn比较,你会发现它们差距很大。

3. GIT内容的完整性要优于SVN

GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。这里有一个很好的关于GIT内容完整性的讨论 – http://stackoverflow.com/questions/964331/git-file-integrity

你可能感兴趣的:(面试题总结)