美文网首页
面试题总结

面试题总结

作者: 孟豊Mike | 来源:发表于2017-02-13 17:45 被阅读21次

    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

    相关文章

      网友评论

          本文标题:面试题总结

          本文链接:https://www.haomeiwen.com/subject/xvltwttx.html