ViewController 的生命周期
|
|
|
|
持续集成(Continuous Integration)持续是指开发阶段,对项目进行持续性自动化编译、测试,以达到控制代码质量的手段。持续集成是一种软件开发实践。
— MBALab
Jenkins、Travis、Gitlab、buddybuild等都是常见的持续集成工具,虽然他们都可以用于持续集成,但是不乏有各自的优缺点。综合考虑,Jenkins目前是其中使用最广泛,最主流的持续集成工具,这篇文章也是主要围绕Jenkins进行展开来讲。
Jenkins作为传统的工具,前身是Hudson,从04年到现在已经有十几年的发展历史。因为这个 工具比较常用,大家也比较认可,软件开发的各种实践也可以通过大量的插件组合来实现,可定制性也比较好。
1、那么Jenkins 有哪些功能呢?
(1)定时拉取代码并编译
(2)静态代码分析
(3)定时打包发布测试版
(4)自定义额外的操作,如跑单元测试等
(5)出错提醒
基本上都是持续集成实践中的要求和周边的一些实现措施,如提醒功能等,出错后及时提醒开发者修复,Jenkins 中通过配置 SMTP 配置信息(这个一般的邮件服务提供商都有提供),邮件模板等,创建事件触发器,在事件(如编译失败)发生时,及时发送邮件通知开发者,挺方便的。
2、Jenkins流程
目前而言,CocoaPods因该是我们项目第三方依赖库管理的不二选择了。什么?你还没用过CocoaPods!信不信打哭你!认真脸,可以这么说,我们项目所需要用到的主流第三方库在CocoaPods上都能找到,同时我们也可以用它来方便的管理和更新我们项目引入的第三方库。这些功能是不是已经很棒了,对于单人开发来说,其实已经够了。毕竟万事都有个然后嘛,是不。团队开发的时候,你就会发现对于项目开发而言如果没有一个很好的管理方法,开发者的项目代码就显得冗余了些,其实很多的时候,我们都是专注于自己的那块业务开发,对于团队的其它代码并不关心,加之近年组件化编程的思想也越来越流行。podspec貌似是一个不错的选择方案。艾艾~不好意思废话说得有点多。
这样说吧,其实它就是一个Git仓库,专门存放你组件代码的地方,和你平时把代码提交到自己的git或者svn没什么两样,只不过它的remote端在GitHub、CODING、Bitbucket…上而已
第一步 我们需要创建一个 Git仓库
前几天去CODING上注册了个账户,所以就用CODING来玩玩。当然GitHub、CODING、Bitbucket上步骤都是相似的所以大家不要惊慌。
这里特别鸣谢黄灿师兄,感谢他为我们整理《Ios 7.1 以上系统企业级发布解决方案》文章,现在,我把它放到博客上面,希望对IOS开发的仁兄有帮助。
此前 iOS7.1 正式发布。此次发布带来了一个巨大变化,对于所有 iOS 企业开发人员来
说是个巨大的噩耗,因为原来的 HTTP 应用发布方式不再有效。
这个变化没有得到苹果官方的说明。尽管这样的事情并不是第一次发生,但是我们在 iOS7.1
上测试的结果表明,苹果再次对开发者们下“黑手”了。
通过 Xcode Organizer 查看 7.1 设备上的控制台,我们得到了如下信息:
Could not load non-https manifest URL: http://www.somedomain.com/manifest.plist
苹果已经在 7.1 中禁止了“非 HTTPS”方式的 manifest URL。 你得将上面的 URL 改成
https://www.somedomain.com/manifest.plist 才行。
KVC(Key–Value Coding,键值编码)KVC提供了一种在运行时而非编译时动态访问对象属性与成员变量的方式,也就是说,我们可以用字符串的内容作为属性名称或者成员变量名称进行访问。这种特性有些类似于其他高级编程语言中的反射(比如java)。简单的说它是一种可以直接通过字符串的名字(key)来访问类属性的机制。而不是通过调用Setter、Getter方法访问。
KVO(Key-Value Observing,键值观察)KVO提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。
今天看了下KVC与KVO的相关东西,突然有了一种醍醐灌顶的感觉,以前没用过,但是今天才发现,这是个好东西啊,以前要是我们的界面上面有关于UI的变动,我们必须要对界面进行刷新后才能看到效果,然而每次的刷新必定会带来很大的内存开销,特别是我们使用UIViewTable的时候,要是数据变更多了,那么我们就需要重新处理变更所带来的界面变化,那么我们又会重新去加载cell,要是cell达到了几百的数量级,那么我么的内存实际上是需要很大的开销的,有了KVC、KVO这个问题就迎刃而解了,我们可以在可能需要变化的属性上面注册KVO,当我们的界面发生改变的时候,直接可以改变属性值,而不需要我们再次使用刷新的方式来更新界面了。
在说使用KVO的时候,我想先说说KVC,因为我们要想使我们的KVO得到有效的使用,我们的对象必须是建立在支持KVC的基础之上的,先不扯淡了,我们直接进入正题吧。
iOS有三种多线程编程的技术分别是NSThread 、Cocoa NSOperation、GCD,抽象度层次是从低到高的,抽象度越高的使用越简单,也是Apple最推荐使用的。在前面呢我对GCD和NSThread的基本使用做过一些简单的总结,大家有空可以看看。
NSOperation和NSOperationQueue其实也是IOS多线程推荐使用的方法之一,很多网络框架底层的实现原理也都是通过这种方式实现的。但是自己使用的话我还是推荐使用GCD或者NSThread之一,不过也不一定,开发者也可根据自己的使用习惯自己选择用什么方式来实现。因为其实三种方式都是比较简单的,但是就我个人而言,GCD、NSThread是我比较喜欢使用的。在这里我先对NSOperation的使用方式做一些简单的总结,以后用到了再来完善这篇文章。
iOS有三种多线程编程的技术分别是NSThread 、Cocoa NSOperation、GCD,抽象度层次是从低到高的,抽象度越高的使用越简单,也是Apple最推荐使用的。在前面呢我对GCD的基本使用做过一些简单的总结,大家有空可以看看。这里呢我主要对NSThread的一些基本的使用呢做一些基本的概括。主要是对自己进行一些总结,也希望对大家使用NSThread的开发者有用。
NSThread相比其他两个的用法呢,最大的差别就是我们要对我们做的事情负责,简单来说就是我们用了它,就得需要自己管理thread的生命周期,线程之间的同步也需要自己手动添加代码,其实呢也没那么麻烦的哈,不要被吓到了。从事过java开发的人来说呢thread就更好理解了,因为他们是完全类似的。是不是已经迫不及待了,那我们就进入正题吧。
Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统。这建立在任务并行执行的线程池模式的基础上的。它首次发布在Mac OS X 10.6 ,iOS 4及以上也可用。简单的说它提供了IOS多核编程的解决方法,注意她是纯C语言,并且提供了非常多强大的函数,它是基于函数使用的,而不是我们面向对象里边说的方法。
GCD的工作原理是:让程序平行排队的特定任务,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务。一个任务可以是一个函数(function)或者是一个block。GCD的底层依然是用线程实现,不过这样可以让程序员不用关注实现的细节。GCD中的FIFO队列称为dispatchqueue,它可以保证先进来的任务先得到执行,即操作系统里边的先进先出,后进后出。
UITableView相信对于诸多的从事IOS开发的人来说已经是非常熟悉的了,可以说iPhone很多应用都有使用,应该来说是一个比较频繁的组件了,对于它的很多使用技巧,我们今天就不做讨论了,这里主要说的是UITableViewCell的重用机制。
对于一个好的应用开发来说,系统的架构是很重要的,必须清晰明了,各部分设计必须分工明确。比如现在很流行的MVC系统架构。把视图、模型、控制都分割开来。其实UITableViewCell设计思想也是这样的,开发者必须明白,要想达到一个很好的cell复用效果,那么我们就必须明白,把cell和数据分割开来。要是我们明白这点,那么我们在进行cell复用的时候思路就很清晰了。并且可以规避掉我们初学者看起来很无厘头的bug。比如在进行上下滑动的时候,cell重复显示了以前的,这并不是我们想看到的。
首先我们先看段代码
我们在进行IOS手机开发的时候,理解原生方法的执行次序,以及执行原理是非常重要的,我们在开发的过程当中,有的时候就是对IOS执行方法的次序及机制不够了解,进而容易犯一些比较低级的错误,而这些错误我们是完全可以轻易避免的。这篇文章是我对UIViewController里边的几个方法的调用次序做一个总结,希望以后对自己或者浏览者有用。
简单来说loadView方法是用来负责创建UIViewController的view的,也就是说当UIViewController的nib为nil的时候调用。它有两种调用方式,一种是我们重载了此方法,另一种是如果没重载调用[super loadView]
下面我们说说没重载的情况,也就是[super loadView]会怎样做创建view的事情
1.它会先去查找与UIViewController相关联的xib文件,通过加载xib文件来创建UIViewController的view,如果在初始化UIViewController指定了xib文件名,就会根据传入的xib文件名加载对应的xib文件 ,方法为