放弃iOS4,拥抱iOS5

前言
苹果在2011年的WWDC大会上发布了iOS5,不过考虑到要支持iOS4.x的系统,大多数App都无法使用iOS5的新特性。现在将近1年半过去了,从我们自己的App后台的统计数据、一些第三方的统计数据和一些业界的朋友告知我的数据都显示,iOS4.x的系统所占比例已经小于5%了,并且还在持续下降。所以,我们有必要放弃对iOS4.x的支持,全面拥抱iOS5。
只支持iOS5.0以上版本使得我们可以使用iOS5带来的诸多新特性,有些新特性可以极大地方便我们的开发,我将这些新特性列举如下。
Storyboard
Storyboard(故事板)是XCode4和iOS5提供的一个用于控制View Controller之间跳转关系的新概念。你可以把它理解成以前一堆Nib文件的集合。在这个集合里面,每个Nib文件被称作scene(场景),scene之间的跳转关系被称作segue。segue代表着传统的界面间切换的方式,通常是Push方式和Modal方式,当然,你也可以自定义自己的Segue。如下示例图是一个Storyboard的界面:

使用Storyboard的好处有以下几点:
- 你可以从storyboard中很方便地梳理出所有View Controller的界面间的调用关系。比如上面那个storyboard示例图,我们就可以很清楚地了解到4个View Controller相互之间是怎么调用的。而这在以前,这些调用关系,都是隐藏在每个View Controller的代码中的,你需要一点一点读代码,才可以将整个调用逻辑整理清楚。
- 使用Storyboard可以使用Table View Controller的Static Cell功能。简单来说,对于象设置页面等固定内容的TableView,可以直接在Storyboard中通过拖拽就可以设置其界面了,而不是象以前那样需要写一堆table view的delegate和data source回调函数。
- 通过实现 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 方法,每个View Controller的跳转逻辑都聚集在一处,这方便我们统一管理界面跳转和传递数据,这相当于多了一个编程约定。
- Storyboard可以方便将一些常用功能模块化和复用。例如WWDC2011年介绍Storyboard的视频就将微博分享功能模块化成一个单独的Storyboard。我在开发App时,也将例如通过第三方注册登录模块做成一个单独的Storyboard,便于以后复用。
另外,在iOS6中,storyboard又新增了如exit segue, container view等新功能,这些功能都非常体贴,我们向新的技术方案迁移可以在未来更加方便地使用iOS和XCode的新特性,方便我们的开发。
当然,Storyboard也有它的问题。比如,如果2个人同时编译storyboard,在版本管理中出现冲突时会比较麻烦。虽然storyboard是XML格式的,但是里面的信息有些时候还是不太清晰,当冲突发生时,合并冲突可能会比较麻烦。解决办法是,将Storyboard按功能拆分,每个人尽量负责一个单独的Storyboard,如果实在需要2个人都修改它,避免同时修改。
ARC
因为ARC是在编译期做的,所以虽然是与iOS5.0同时推出的Objective-C特性,但是其实ARC是支持iOS4的。只是在iOS4中,不能使用ARC的weak关键字。
由于不需要支持iOS4,我们可以将原本的 __unsafe_unretained 关键字换成weak。这样当这个弱引用对象被回收时,weak指针会被智能地设置成nil,防止“野指针”的产生。
很多人说ARC有这样那样的问题,其实他们是没有真正用好ARC。我在开发粉笔网iPhone客户端时,由于使用了ARC,花三个月开发完的应用,用instruments检测后,没有发现任何内存泄漏问题。这在没有使用ARC的工程中是不可想象的。苹果在推出ARC两年后,今年正式将ARC引入到Mac OS操作系统的SDK中,并且正式将原有的GC deprecated掉,这也说明了ARC技术方案已经是非常成熟的了。
UIKit
UIKit在iOS5进行了大量更新。除了新增了如UIStepper控件外,也为以前的控件增加了更多的定制接口。我们可以方便地定义UINavigationBar, UITabBar, UIToolBar等常用控件。
苹果在iOS5中给UIViewController新增加的5方法以及一个属性。关于这个新特性我在这篇文章中详细介绍过。新增的方法主要解决的是让 view的load/unLoad/appear/disappear的相关回调可以传递到子view controller中。
CoreImage
苹果从iOS5开始,引入了新的图象类CIImage。CIImage相比以前的UIImage类,更加适合于图象处理和图象分析。
在图象处理方法,苹果内置了CIFilter类,方便开发者对图形进行各种各样的特效处理,在iOS5中,苹果提供了48种Filter,而在iOS6中,内置的Filter达到了93种。可以使用如下代码,查询到当前系统中提供的Filter列表:
- (void)logAllFilters {
|
这些内置的Filter在分类上,包括:
- 颜色效果类。例如黄昏效果,曝光度调整等。
- 组合效果类。把2张图片按各种规则混合成一张图。
- 几何变形类。例如把照片倾斜或者翻转。
- 重复效果类。如平铺,折叠,镜象等。
- 失真扭曲类。如把图片中心做成漩涡效果等。
- 模糊和锐化类。
- Stylize效果。
- Halftone效果。
以上所有效果可以叠加作用在一起,最终你可以创造出自己的图片处理效果。最终你可以通过CIContext,将处理过的CIImage转换成UIImage输出。有了Core Image,你可以方便地开发图象处理相关的应用,而不用关心图象处理算法的细节。
NSJSONSerialization
在我的《不要使用SBJSON(json-framework)》 一文中,我提到了关于JSON解析库的性能测试。测试结果表明,苹果从iOS5开始提供的 NSJSONSerialization 类有着最好的性能表现。所以,从iOS5以后,你可以扔掉那些第三方JSON解析库了。
ViewController切换
iOS提供了如下新的接口来切换ViewController,而以前的presentModalViewController和dismissModalViewControllerAnimated被Deprecated掉了。
// 新的接口 |
新接口的差别是提供了一个completion参数,允许你传入一个block,来定义该操作结束时的回调。使用新的函数后,可以方便同时Dismiss或Present多个View Controller,也可以方便做多个UI效果之间的衔接。
其它
GameKit, Core Data, NewsstandKit, GLKit在iOS5中都有更新。可惜我都没有具体使用过,所以不便做更多介绍。
放弃iOS4,拥抱iOS5的更多相关文章
- MinIO很强-让我放弃FastDFS拥抱MinIO的8个理由
目前可用于文件存储的网络服务选择有很多,比如阿里云OSS.七牛云.腾讯云等等,但是收费都有点小贵.为了帮公司节约成本,之前一直是使用fastDFS作为文件服务器,准确的说是图片服务器.直到我发现了Mi ...
- iOS系统自带的 UIAlertView 自动旋转的实现
这里主要解析 UIAlertView 的几个关键功能的实现: 随着设备屏幕的旋转而旋转: Alert弹出框,使用UIWindow来实现,就是说,不用依赖于当前显示在最前面的UIView. 实现源码参考 ...
- iOS开发使用半透明模糊效果方法整理
虽然iOS很早就支持使用模糊效果对图片等进行处理,但尤其在iOS7以后,半透明模糊效果得到大范围广泛使用.包括今年最新发布的iOS8也沿袭了这一设计,甚至在OS X 10.10版Yosemite中也开 ...
- APP测试流程
1 APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间.正式测试前先向 ...
- Objective-C 中类属性(修饰)
Objective-C 中类属性(修饰) (2013-07-13 14:38:35) 转载▼ 标签: it 分类: IOS笔记 nonatomic: 非原子性访问,对属性赋值的时候不加锁,多线程并发访 ...
- iOS应用开发:什么是ARC
ARC是什么 ARC是iOS 5推出的新功能,全称叫 ARC(Automatic Reference Counting).简单地说,就是代码中自动加入了retain/release,原先需要手动添加的 ...
- ARC小知识
ARC是iOS 5推出的新功能,全称叫 ARC(Automatic Reference Counting).简单地说,就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管 ...
- iOS viewDidUnload方法
转自:http://blog.csdn.net/chun799/article/details/8951694 在iOS6中,viewDidUnload回调方法被Deprecated掉了.查看苹果的文 ...
- Emoji表情符号兼容方案(适用ios,android,wp等平台)
http://blog.csdn.net/qdkfriend/article/details/7576524 Emoji表情符号兼容方案 一 什么是Emoji emoji就是表情符号:词义来自日语(え ...
随机推荐
- HDU 5213 Lucky 莫队+容斥
Lucky Problem Description WLD is always very lucky.His secret is a lucky number K.k is a fixed odd n ...
- POJ 3067 Japan(经典树状数组)
基础一维树状数组 题意:左边一排 1-n 的城市,右边一排 1-m 的城市,都从上到下依次对应.接着给你一些城市对,表示城市这两个城市相连,最后问你一共有多少个交叉,其中处于城市处的交叉不算并且每个 ...
- 【转载】C++中public,protected,private访问
第一:private, public, protected 访问标号的访问范围. 假如我们约定: 类内部-----指的是当前类类型的定义中,以及其成员函数的声明和定义中: 类外部-----指的是不在当 ...
- Liferay 6.2 改造系列之五:修改默认站点的页面内容
相关页面可以通过/portal-master/portal-impl/src/portal.properties文件配置进行修改: 登录页: ## ## Default Landing Page ## ...
- 编解码-protobuf
Google的Protobuf在业界非常流行,很多商业项目选择Protobuf作为编解码框架,Protobuf的优点. (1)在谷歌内部长期使用,产品成熟度高: (2)跨语言,支持多种语言,包括C++ ...
- stl(set+stack) LA 3634 The SetStack Computer
题目传送门 题意:给一些对集合的操作,询问每一次操作后栈顶的集合元素个数 分析:首先{}是空的,每一次add时候,{} -> { {} }变成了有一个元素的集合,利用set和stack,map容 ...
- iOS 含有 中文的URL 转码问题
非ARC模式下: - (NSString *)encodeToPercentEscapeString: (NSString *) input { NSString *outputStr = (NSSt ...
- HDU3820 Golden Eggs(最小割)
题目大概说给一个n*m的格子,每个格子放金蛋或银蛋都会得到不同的价值,当然也可以不放,不过如果存在相邻的两个格子都是金蛋会损失价值g,都是银则损失s.问能得到的最大价值. 有点像二者选一的最小割模型, ...
- Backbone.js学习之二
经历一段自我修炼,终于领悟到Backbone.js的关键知识点,也发现了原来MVC可以在前端这样梦幻的发挥,Backbone.js确实是一个很有魅力的前端MVC框架. 练就一门技术,需要有扎实的功底, ...
- 编程之路 - 写给打算进入IT行业的新人们
IT=挨踢,这是IT人的自嘲,进入IT行业是有四五年了,也算得上是一个“老人”了吧,见了不少新人,面试了不少新人,也带了一些新人,多多少少还是有点发言权的. 关于书本 新人们常常会说我看了多少多少的书 ...