来自:http://www.zhihu.com/question/20001972/answer/15572624
AIR的优势
AIR的优势其实就是Flash或者ActionScript语言的优势。这些优势大家已经在互联网上看过许多了,我还是啰嗦一下:
1. 优秀的2D性能和渲染机制
网络上关于Flash性能底下的言论是绝对错误的。其实Flash的性能相当高,而且大多数情况下都比Javascript高。ActionScript经过如此长时间的专制发展,形成了一套易于使用的显示列表(DisplayObject)机制,加上灵活的MovieClip和Sprite等等对象,在制作2D动画方面,是目前互联网技术中最好的选择。即使是你认为显示列表的性能底下(在显示对象超过1K的情况下确实低下),你也完全可以使用BitmapData这个高性能的引擎做位图渲染。
2. 蓬勃发展的3D技术
Stage3D比OpenGL要更容易掌握。使用各种开源、付费的引擎,程序员可能不需要了解3D工作机制,就能制作3D动画(或者游戏)。当然,目前的Stage3D的驱动支持还有待完善,但Adobe目前很努力(不努力就挂掉了),驱动情况会慢慢解决掉。
更让人激动的是Starling这类使用Stage3D进行2D渲染的引擎。完全为游戏而生,把Flash的2D性能又提高了一个数量级。
3. 比较完善的框架和社区
Flash社区经过多年发展,已经非常完善,有很多的优秀的框架、工具、引擎、调试器、甚至编译器可以使用。当然,OC社区或许更完善,所以这个有优势并不明显。
4. 简单易用的语言
ActionScript是简化版的JAVA。我无法把ActionScript与OC对比,但ActionScript绝对比JAVA易用。相关比较可以看这个:http://www.zhihu.com/question/19762068/answer/15544195
5. 使用ANE可以完成所有OC能做的事情
AIR使用的ANE插件技术,让你用OC开发一些本机插件,以API的方式来调用它,让你能完成AIR本不能完成的事情。后面我会提到,其实这个也算劣势。
AIR的劣势
1. 大文件
AIR在iOS上并非采用的是虚拟机模式。它直接把ActionScript代码编译成二进制代码,这与XCode变成成的二进制代码没有区别。整个AIR运行时也变成二进制代码。这就导致了无论是什么大小的程序,你总要在它的基础上加上运行时的大小。
准确的编译文件大小测试:
- AIR3.5,AS项目,仅使用了graphics中的drawRect方法,3.8MB
- AIR3.5,Flex4.6项目,没有放任何组件,5.8MB
2. 不是BUG的BUG
由于上面描述的原因,你要把ActionScript当作OC来用,否则可能会碰到某些不是BUG的BUG。我在这篇文章中就讲到了这样一个BUG:http://zengrong.net/post/1654.htm
3. 痛苦的调试
FlashBuilder并不是面向iOS开发的,所以它的调试过程复杂且痛苦。在FlashBuilder 4.6上,我必须利用iTunes这个垃圾软件把打包好的Debug版本的ipa文件安装到iOS设备上,然后在FlashBuider上启动调试进程。Debug版本的ipa运行十分缓慢(对,是十分),甚至因为它的缓慢,很多BUG都无法发生。
当然,这种情况在AIR 3.4出现之后有所好转。AIR 3.4不需要iTunes就能把ipa部署到iOS设备中进行调试。但是,目前的FlashBuilder4.6还不支持这种方式,你要使用AIR3.4的新的直接部署调试功能,就必须使用命令行,然后调用fdb来调试。
AIR 3.5支持在Release版本(非Debug版本)中输出调试堆栈,这能让我们用正常的速度来调试ipa,但这其实是让我们更麻烦了。
4. 痛苦的编译
你能忍受一次编译需要20分钟么?如果你的程序很复杂,那么这个时间还会延长。你能忍受在发布程序之前,突然发现一个小bug,然后等待20分钟编译调试么?注意,某些bug,只能在编译之后才会出现。
5.痛苦的ANE调试
和上面的调试不同,ANE的调试更加痛苦可不可捉摸。很多情况下,ANE的错误是直接FC,没有报错代码,没有消息,解决问题只能靠猜,你能猜中么?
更痛苦的是,大部分情况下,使用AIR的程序员都在Windows下工作,使用AIR自带的ADL在Windows系统上调试,这种调试方法是不支持ANE的,你要测试ANE,必须打包后在iOS真实设备上调试,这又碰到了上面说的“痛苦的调试”的情况。
不完善的小结
这种情况下可以使用AIR
- 你要开发的东西是游戏(不要用AIR开发应用)
- 有一个Flash游戏需要移植到iOS上(移植)
- 开发一个新游戏,只有1个月时间(快速开发)
- 只会ActionScript和Flash(技术限制)
- 跨平台优先级高于一切(跨平台)
关于Flex
Flex SDK包含swf编译器、swf相关工具、MXML语言和一套名为Flex的框架,这套框架大部分是做界面的事情。但即使是Adobe说他们的Flex中包含的UI组件为移动设备做了多少优化,也千万不要用它来开发移动设备上的程序,否则你会痛苦一被子。
Flex/Flex SDK/AIR的关系,可看这篇文章:http://zengrong.net/post/1295.htm
相关推荐
xcode支持iOS15.2和iOS15.4
Xcode iOS 16真机调试包 开发调试 iOS16适配
将Xcode适配可以调试、编译、运行、打包系统版本号为iOS 16.0 版本的设备,解决"Could not find Developer Disk Image"问题
XCode的iOS11.0开发包,XCode的iOS11.0开发包,XCode的iOS11.0开发包,XCode的iOS11.0开发包,XCode的iOS11.0开发包
Xcode 模拟器手动下载地址,内容只包含从iOS 8 - iOS 12 之间的各个小版本。
不想更新Xcode的,还想在Xcode 上运行的可以将SDK移入指定路径/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
Xcode开发,ios12.0(16A366)版本兼容包。适用于老旧mac,虚拟机Mac以及黑苹果,在不能更新mac版本无法升级Xcode时,使用该兼容包。可使低版本Xcode对ios11.4的真机进行真机测试
将Xcode适配可以调试、编译、运行、打包系统版本号为iOS 13.2 版本的设备,解决"Could not find Developer Disk Image"问题 使用详情 请前往https://blog.csdn.net/u010731949/article/details/52576792
xcode配置iOS10.3开发包 解决iOS 10.3升级后无法真机测试 Could not find Developer Disk Image
xcode真机调试所需,从xcode9.2解压获得,使用时解压到 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport即可
Xcode iOS11.0版本的配置包 给需要真机调试iOS11.0系统版本手机又不想升级Xcode的童鞋 为什么会有摘要必须大于100字节这种逆天的设定!!!
xcode8调试IOS11 Shift+Command+G进入 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport 把解压后的文件复制进去。
它自动配置您的应用程序以使用最新的苹果服务、 管理统一的资产目录中的图像,并可帮助您设计令人惊叹的接口为 7 的 iOS 和 OS X。它也容易地分析您的代码、 监视性能,并测试您的应用程序,并对持续集成的访问与...
xcode真机调试所需,从xcode9.2解压获得,使用时解压到 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport即可
xcode ios sdk 只收辛苦积分,有情发放,IOS11.3、11.3 (15E217)、11.3 (15E5178d)、11.3 (15E5201e)、11.4、11.4 (15F79)、11.4 (15F5037c)、11.4 (15F5061c)、12.0 (16A5288q)
需要的请下载, 复制到 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport 然后把你需要的调试包拖进去
iOS9.3.2,iOS10 SDK 让你你的xocde5、6支持调试iOS9,iOS10。 源自Xcode_8_beta6,2016-08-24
xcode真机调试所需,从xcode9.2解压获得,使用时解压到 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport即可
Xcode 配置iOS 13.1 开发包.zip
xcode真机调试所需,从xcode9.2解压获得,使用时解压到 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport即可