欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

面试题总结

程序员文章站 2022-05-12 23:39:53
...

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://*.com/questions/964331/git-file-integrity

上一篇: hash/unordered_map

下一篇: 面试题总结