九个角度分析对比 Android、iOS 开发区别
_乞力马扎罗的雪 CYF 的博客 - CSDN 博客_ios 平台下 xcode 与 objective-c 的搭配, 开发者需要面对宏、头文件、项目、计划以及构
对于创业的人来讲,选择 Android 还是 iOS 是一个棘手的问题。有数据显示 Android 的市场份额突破 80%。有不少人会觉得开发者在两个平台之间的选择就更加容易,毕竟市场决定利润。但事实上并非如此。今天从开发环境、配置、UX 设计、语言、API、网络、分享、碎片化、发布等九个方面把 Android 和 iOS 平台做一次 PK。
网络通信实现
当今大多数应用都采用互联网 API,iOS 和 Android 都提供了一整套工具和 API 帮助开发者实现这样的功能,都提供了非常类似的 WebView——基本上相当于一个浏览器窗口,开发者可以将其插入到应用程序的任何位置。
网络连接上都是在后台运行的,一般不会阻塞应用的主线程,多线程难度比较大。Android 提供了一个 AsyncTask 类来解决类似的问题,虽然有些冗长,但效果很好。Android 另外还提供了一个简单方法来判断用户是否在线。iOS 也提供了差不多的东西,但相比之下有些低级,令人不是很满意。
不过,也有一些开源库能够帮助开发者更好的实现 iOS 上的网络通信功能,比如 AFNetworking。不过这个在 Android 上实现不了,因为 Java 不支持代码块。
结论:不考虑第三方库的情况下,Android 有优势,而 iOS 在第三方库上具有优势。
分享
从应用中分享内容到社交网络上到底有多容易?原以为这是 Android 的一大利器,因为 Android 很早之前就有了一个功能强大的应用内通信系统 Intents。通常情况下,Android 仍然能够比较方便的实现应用之间的数据分享。
而在分享上,iOS 已经基本追赶上 Android 了。这个大家可以自己判断下,GitHub 上有两份有关分享 Scanvine 故事的源代码:Android 版、iOS 版。iOS 代码比较长一点,因为我在其中加了一些 Google Analytics 代码。
结论:旗鼓相当
开发环境
很多人会用纯文本或者命令行写代码,但利用一个集成开发环境或者 IDE 显然更加有效率。
苹果的开发环境是 Xcode,具有运行速度快、功能强大且安全性高不易被入侵等特点。且随着不断完善优化,Xcode 诡异的编译机制以及强加给开发者的那些有关 iOS 应用程序对设备控制权的复杂证书机制也逐渐被开发者所忽略。且 Xcode 的调试器能够无缝完美调试 Bug,模拟器的响应速度也非常快。
再来看看 Android。目前最先进的 IDE 是利用 Android 插件定制的 Eclipse。运行缓慢、笨拙等缺点显而易见,Android 碎片化也带来了不必要的复杂性。调试器非常糙,大部分时间让开发者自己在日志文件中除错,而 Xcode 则提供了除错工具。而模拟器,往往需要几分钟时间才能够启动,还常常会连接不上 Android Debug Bridge。
谷歌也已经发现了问题,现在他们准备推出一个新的 Android Studio IDE:
Android Studio 目前为试用版本。仍有不少功能不完整或尚未实现,所以您可能会遇到一些未知的错误信息。如果您不愿意使用一个未完成的产品,您可以下载(或继续)使用 ADT Bundle(通过 ADT 插件定制的 Eclipse)。能够看到谷歌开始努力听起来是不错的,但不知道猴年马月才能完整的实现。
结论:显然,iOS 胜出。
配置
正如前面写到的,在 Xcode 与 Objective-C 的完美搭配之下,隐藏着令人恐怖的编译机制。开发者需要面对宏、头文件、项目、计划以及构建配置等一大串构建配置的列表。当遇到一个莫名其妙的连接器错误时,是不是有人会彻底绝望,虽然提示里写着:“噢,你的第三方代码不支持 ARC,添加 –fno-objc-arc 标志即可解决!很简单不是吗?”
Android 则相对简单的的,它有一个单独的 manifest 文件,当开发者保存任何文件时,Eclipse 通常会在整个系统中构建一次应用。当然,在权限没有配置正确导致应用程序不能运行的情况下,要是能够给出更明确的提示就好了。总体讲,Android 应用的配置相对简单容易。
结论:Android 胜出
语言
Android 是利用 Java;iOS 利用 Objective-C。当然,也有例外,如 Xamarin。相比 Java,Objective-C 显得较为啰嗦,比如,在 Java 中的这句定义字符串的语句:
String s2 = s1.replace(“abc”,”xyz”);
到 Objective-C 中变成了:
NSString *s2 = [s1 stringByReplacingOccurrencesOfString:@"abc" withString:@"xyz"];
但用 Objective-C 时间久了就会发现比 Java 更好更干净。Objective-C 有代码块,Java 没有;它有类别(categories),Java 没有。Objective-C 不需要开发者去用 try/catch 进行异常处理,Java 需要。
当然,Java 有其自己的优点。比如更好的堆栈追踪,这意味着追踪零星的错误更加容易。在几年前,Android 在垃圾回收机制上一直有巨大的优势。而现在,iOS 平台上有了自动引用计数,Android 的优势也渐渐消失了。
结论:iOS 的 Objective-C 胜出
API
Android 和 iOS 都给自己的开发者提供了巨大的软件库,广义上讲,这些库基本类似:提供手机功能及特点的 API、提供网络访问功能、提供包括功能强大的 WebView(基本上可以实现一个完整浏览器的功能)在内的全套视图对象。最重要的是同时还提供控制器,基本上 iOS ViewController 与 Android Acticity 十分类似。
iOS 提供了一组 Android 不具备的框架和特性——比如,没有一款 Android 系统能够提供媲美 iOS Core Data framework 的框架或其它特性。并且,iOS 比 Android 更加干净,有着更好的设计。
另一个指标(有争议):代码行数。对于拥有相近功能的某个应用来说,iOS 平台上通常利用 1596 行代码就可实现,包括头文件,而对于 Android 上的 Java 代码及 XML,则需要 2109 行,多了 32%。
结论:iOS 更优
用户体验设计
这一项对比中大多人会觉得苹果是胜者。Interface Builder 是 Mac OS X 平台下用于设计和测试用户界面(GUI)的应用程序。虽然 Mac OS X 下所有的用户界面元素都可以使用代码直接生成;但 IB 能够使开发者简单快捷的开发出符合 Mac OS X human-interface guidelines 的 GUI。通常开发者只需要通过简单的拖拽(drag-n-drop)操作来构建 GUI 就可以了。IB 使用 Nib 文件储存 GUI 资源,同时适用于 Cocoa 和 Carbon 程序。在需要的时候,Nib 文件可以被快速地载入内存。
理论上说,Android 平台也有一个具有可比性的可视化工具。Android 平台上应用的开发将会面对各式各样不同的屏幕尺寸,这是它不可忽视的问题。当然,iOS 设备的尺寸也在逐渐多样化,iOS 平台未来一定会面临一样的问题。当然,Android 也向开发者提供了 icon 包帮助开发者更加容易的完成 UX 设计。不过,iOS 开发者也可以利用一些第三方的 icon 包,比如 Icons8。
在这项对比上,iOS 尤其特殊的优势。首先,屏幕种类相对更加简单,只有三种(iPad、iPad mini 及 iPhone)尺寸和两种分辨率;其次是其默认的 iOS 视觉元素如弹出式菜单和消息,比 Android 的视觉效果更有吸引力。
结论:iOS 更胜一筹
碎片化问题
这点对比就无需多言了,Android 的碎片化问题一直饱受诟病。但值得注意的是,谷歌正在着手进行碎片化整理工作,值得期待一下。
结论:显而易见,Android 的问题严重
应用发布
Android 平台应用的发布非常简单,只需要通过一个简单的 Eclipse 引导签署你的应用,然后开发者就能拥有一个可以在任何 Android 平台运行的 APK 文件。然后开发者可以将这个 APK 文件发布到各种平台上进行推广,用户安装即可。如果应用在使用中出现了问题,出现代码错误,开发者也能马上上传修复的版本供用户下载。
在 iOS 平台上发布一款应用简直就是一场噩梦。单在创建证书及 Distribution Profiles 环节,不少开发者就需要花费一天的时间来搞定。而测试工作,如果不是有 TestFlight 这样的应用,绝对是难以描述的糟糕。
结论:Android 大胜
综合来看,iOS 比 Android 更有优势。虽然 Android 有自己的一些优势,但显然开发一款优秀的 iOS 应用比开发一款 Android 应用更加容易。除自身因素之外,iOS 用户人群相对高端(富裕、甚至可能有影响力),所以大部分开发者会选择 iOS 平台作为应用开发第一平台。
github 主页:https://github.com/chenyufeng1991 。欢迎大家访问!