- 浏览: 186074 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
yizhichao116:
大哥
设置为可编译链接
1) .m文件右键-&g ...
Windows下Object-C编译环境的搭建
Android与iPhone平台比较
1.语言、编程模型和平台
1.1语言
iPhone开发语言选择的是Objective-C,Objective-C是基于C语言的,并对其进行了一些面向对象的扩展,如类、继承、接口、消息、动态类型等,而开发Android应用程序时使用的是Java语言(但它实际上不能真正编译字节码)。
Java对我而言就简单了,我必须要说的是我很高兴进入移动开发领域并没有因此而多学习一门语言,现有的编程技巧是来之不易的,如此重复使用专业知识是非常有价值的。
我还是花了一些时间来总结Objective-C的语言特性,我很快发现我喜欢上了某些语言特性,如消息传递、分类和命名参数,但是我发现Objective-C的语法有些笨重。通常我会感觉到为一个简单的概念不得不使用更多的表达式,而IDE提供不了多少帮助。
Objective-C实际上是一种80年代的语言,某些问题如拆分头信息和执行文件,以及DRY破坏确实是在浪费时间,这些问题都不小,我发现我自己不停地在文件之间来回切换,这不仅在导航上会有成本(哪个文件处于打开状态?),而且每个打开的文件都需要重新创建(加字符号在哪里,选中了什么内容,我在文件中什么位置,文件是如何组织的这些都要消耗系统资源)。
至于DRY,我声明一个属性时必须做5件事情??(在类定义中声明,声明getter/settter,在init方法中初始化,在实施时@合成,在dealloc中发布),如:
Server.h @interface Server : Updatable { NSString *name; <-- declare the property } @property (nonatomic,retain) NSString *name; <--- declare the property again Server.m @synthesize name; <-- implement getter/setter -(void) dealloc { [name release]; <-- release memory }
Java也有类似的问题,但情况没有这么糟糕,IDE可以帮助你编写getter/setter。
Objective-C中的指针虽然很强大,但也很浪费时间,在这里Java和它的垃圾回收机制就显得更迷人了。Objective-C的另一个麻烦是要记住许多约定和规则。
虽然我理解了为什么这里会有init和alloc,但指定[[aloc Foo] initWithArg: arg]还是过去啰嗦,为什么不是[new Foo arg]?或者是Foo(arg),越说越象Java了。
Objective-C的import和forward声明(@class)也很痛苦,虽然这些问题在Java中同样存在,但Eclipse的JDT非常好用,我都快忘了如何编写一个import了,只需要按Ctrl+空格自动完成一个类名或按Ctrl+Shift+O来组织import。
当然Java也不是完美的,但因为我已经与Java打了十多年交道,感觉又不一样了,有时我希望Java更类似于Groovy,但Java的工具确实有很多选择,并且都比较好用。
1.2平台
在Android上我发现可以立即使用Java运行类,但不是所有标准的Java RT类都是可用的,但我并没有遇到这个问题,因为大部分标准的Java IO、网络和正则表达式库都是可以使用的。Android RT类看起来是基于Harmony的,它是很稳定的,经住了时间的考验。
而在iPhone上,我发现我需要的功能是很困难的,类和方法组织得不好,当我在寻找一个静态方法时不是很方便,也依赖于使用的框架,命名规范和代码组织也可能不同,我认为这是旧平台遗留下来的产物。我发现规则表达式、字符串处理和XML解析也让我头痛,最终我不得不选择使用Regex Kit Lite,对于XML解析,我是在libxml基础上提取出来的解析器。
在iPhone上如果遇到什么问题了,我只能求助于Google,希望已经有人遇到过相同问题并已经有解决办法了,这都是因为苹果公司实施的保密策略的后果,在某些时候我只能靠猜测或通过试验找到解决办法。
Android得益于开源的好处,可以获得Android平台的全部源代码,甚至可以重新构建SDK,确保与模拟器中运行类完全匹配。因此在Android平台上不仅可以看到事情是怎么实施的,还可以通过例子进行学习,我可以在模拟器中一步一步学习平台代码,发现我的代码为什么没有产出预期的结果。
一般说来,我发现Android平台类的布局、组织和命名约定是一致的,是可预知的,这就使得它的学习难度大大降低了。
1.3编程模型
iPhone平台最伟大的工作是促进了一个MVC设计模式,使用这一设计模式建立的平台,构建UI都非常简单,但我还没有找到如何组织我自己设计的UI组件,这就意味着当看到示例代码时,所有的组织方式都是一样的。
Android催生的设计模式一样精彩,但它和iPhone的设计模式概念完全不同,Android支持多进程和组件重用,设计结果具有更好的用户体验,但它为开发人员引入了一些复杂性。
Android和iPhone都提供了用户首选项设置功能,都提供了UI来编辑这些首选项,都是保存在XML文件中,Android的XML是可以扩展的,允许自定义UI组件,但iPhone开发人员如果希望自定义首选项,就不得不从零开始实现这个UI,工作量就大多了。
1.4 测试和持续集成
我认为任何开发都应该包括单元测试,只要团队不止一人,还应该包括持续集成。Android开发人员如果知道他们可以编写JUnit测试的话,他们一定会很高兴。我也曾看到一些iPhone单元测试的文档,但由于时间关系我没有仔细地研究,因此这里就不做过多的评论了。
2.资源
苹果公司为开发人员提供了大量的资源,重要的概念都配有视频教程,通过观看视频掌握概念就更容易了,虽然视频发布很慢,但苹果公司也提供了大量的示例程序和代码解释API的用法。
Android开发人员也有很多资源可用,新手指南和API参考在安装SDK时就一起安装到计算机上了,因此即便是在离线状态也有很多资源可用。我发现Android的开发资源组织得非常好,只需要很少的时间进行查找,更多的时间留给发现,特别是ApiDemos示例应用程序提供了一个很好的开头。为了研究架构和API用法,我还下载了许多开源的Android项目,在这方面Android确实占了上风,因为苹果公司一直采取的是保密策略。
3.工具
我将会涉及到的工具分类包括:IDE,UI builder,调试器,分析器。
3.1 IDE
Android开发主要使用的是优秀的JDT工具,基本上只要安装了Eclipse的计算机上都会安装JDT,我使用这些工具已经有些年头了,至今仍然在用。JDT最有特性的可能要算它的增量编译了,当你输入时它可以立即提供错误和警告反馈,它消除了80和90年代普遍存在的“代码编译--等待反馈”的循环,当我在编辑器中输入代码时,警告和错误实时更新,为我提供了即时反馈,直到我在XCode中编写Objective-C时我才意识到这项功能是多么伟大,这时我才意识到在等待编译的过程中会打断编程的思路。
其它Eclipse的关键特性包括:
1、内容助手
2、快速修复
3、组织导入
4、开放式(CTRL+Shift+T)
5、重构
集成javadoc和内容助手是学习一个不熟悉的API的最佳方法,在Eclipse中编写代码时不仅可以使用所有的类和方法,还可以使用它们的文档。
集成javadoc的内容助手
XCode就太差劲了,我甚至不知道该如何下手,下面是我想到的XCode如果想继续活下去应该改进的列表:
1、内容助手要真正能够工作,XCode提供的内容助手经常都是错的;
2、一个像样的窗口/编辑器管理系统,XCode和它的辅助工具(调试器)喜欢打开很多窗口;
3、一个项目树视图,按字母顺序对文件进行排序;
4、集成API文档,我发现我经常在IDE和搜索API文档之间切换,这样会打断连续的思考。
3.2 UI Builder
iPhone开发人员拥有一个界面美观的UI builder,它很灵活并可以展示很多精密的UI,给我的印象很深,但用起来并不顺手,可能要反复看几遍文档才能搞定。
Android UI builder外观上就差多了,而且要对UI编写很多XML代码,不过也不用担心,有内容助手和校验的帮助,可以很快构建好UI。
3.3 调试器
使用了Eclipse的Java调试器再去使用Xcode中的调试器简直就会崩溃,在Eclipse中可以看到并修改变量的值,但在Xcode中却不行,但这在调试代码时几乎是一个最常用的功能了,Xcode经常混淆对象的类型,除了提供指针值外就没有其它内容了,这与Eclipse形成了鲜明的对比。
我还发现Xcode的调试器UI很难使用,在堆栈上点击时会打开一个新窗口显示代码编辑器,最终导致打开了无数个窗口。
3.4 分析器和堆栈分析
iPhone开发工具擅长的是概要分析和堆栈分析,这些工具非常成熟且易于使用,在没有预先学习的情况下,我很快就掌握了它们的用法,并快速发现和修复程序中的内存泄漏问题。
Android开发人员必须使用Android的单播跟踪程序,虽然工作得很好,但需要很努力地配置和操作才行,当我发现必须修改其源代码才能获得用于分析的跟踪文件时我非常惊讶。
我不确定Android是否可以提供hprof格式的堆栈转储文件,如果可以的话,就可以使用强大的MAT工具分析堆栈的使用了。
4. 应用程序商店
iPhone的应用程序商店毋庸置疑是非常优秀的,但让人不愉快的是所有应用程序想要进入这个商店进行销售,都必须得经过苹果公司的审核,多数时候提交的申请都会被打回来,建议想在苹果应用程序商店销售软件的读者去看看这篇文章“避免iPhone应用程序遭到苹果公司的拒绝”(http://www.mobileorchard.com/avoiding-iphone-app-rejection-from-apple/)。还有一个问题就是想从苹果公司获得应用程序销售回扣也是比较困难的,至少销售额要超出250美元才有机会,但Google市场就不一样,只要有1美元就可以了,从苹果和Google公司获得的收益大概在应用程序销售价格的30%左右。
苹果应用程序商店可以将应用程序销售到世界各地,但在Google市场中只能销售到少数几个国家,但在Google市场中你可以无限制地上传你开发的程序,无需经过审核。
5. 总结
Android平台和开发工具非常优秀,使用Java和Eclipse IDE成为其胜出的主要因素,相比之下,iPhone的开发工具就差得太远了,Objective-C和平台API过于笨重,组织得也不恰当,总的说来,我在开发iPhone应用程序时就象回到了1993年,开发iPhone应用程序时成本大约要上升三倍,iPhone开发工具唯一的优势是它的分析器和堆栈分析能力。
从用户角度及目前在世界上的知名度而言,苹果应用程序商店是非常优秀的,在这方面Google市场就明显要弱一些。
可能过不了多久移动开发市场就会发生变化,至少今年会发布18款Android手机,对我而言,我更喜欢Android,当然iPhone也很优秀。
发表评论
-
Notification与NotificationManager
2012-11-14 15:11 740Notification与NotificationManage ... -
Android四大功能组件深入分析
2012-11-14 13:17 783搞Android开发这么长时间了一大遗憾就是没有好好地把其中的 ... -
ContentProvider学习
2012-11-12 17:55 727一、ContentProvider简介: 这个类主要是And ... -
application使用
2012-11-12 16:33 660自定义的Application类的作用是为了放一些全局的和一些 ... -
Android Manifest文件
2012-10-13 22:51 672Android Manifest使用基础,待完善 -
Activity声明周期总结
2012-10-13 22:45 749一、利用Activity 生命周 ... -
Launcher简介
2012-08-20 16:30 920相关链接: http://blog.csdn.net/t12 ... -
Android 异步加载解决方案
2012-08-22 16:48 628一、Android异步加载必要性: 1、不能阻塞UI线程, ... -
Android中Drawable分类汇总
2012-08-21 10:59 38571、Android中Drawable简介: Android ... -
Android手机分辨率总结
2012-08-20 16:31 1007转载网站:http://www.cnblogs.com/gan ... -
ios移植到Android注意(一)
2012-08-20 16:31 656相关链接: http://gamerboom.com/arc ... -
android应用的login图标分辨率
2012-08-16 09:41 978对于Android平台来说,不同分辨率下Icon的大小设计 ... -
Android 任务堆栈
2012-08-16 08:32 22591、简介 提到Android的任务堆栈我们好像不常用,但 ... -
android五大布局总结(一)
2012-08-15 13:58 7541.线性布局(LinearLayout) 线性布局的形式可 ... -
View与surfaceView区别
2012-08-15 13:26 771View类属于Android开发绘制中的显示老大,任何与绘制有 ... -
Box2d基础(一)
2012-08-15 09:10 796一、物理世界与手机屏幕坐标系之间的关系 手机屏幕绘制图 ... -
openGl基础
2012-08-03 11:28 732MD2格式简介 MD2是Quake2中使用的模型文件格式 ... -
AIDL基础
2012-07-23 15:07 854一、 AIDL设计远程接口(Designing a Remo ... -
android EditText属性
2012-07-13 15:48 7881、android EditText中字符个数限制如何操作 ... -
Android TextView属性详解
2012-05-31 12:44 1067android:autoLink设置是否当 ...
相关推荐
Android、iPhone、Windows Phone手机网页及网站设计 最佳实践与设计精粹 pdf扫描版
"Android仿iphone-气泡短信-DEMO.zip" 描述与标题相同,进一步确认这是一个关于Android平台上实现类似iPhone气泡短信功能的演示程序。开发者可能提供了源代码和必要的资源文件,以便其他开发者能够学习、理解和复用...
Iphone与Android 对比分析浅谈(PDF 8页)
在Android开发中,实现一个类似iPhone的时间选择器可以极大地提升用户体验。这个功能允许用户通过直观的界面来选择特定的时间,通常包括小时和分钟。在iPhone上,这种选择器以一个可滚动的圆环形式呈现,而在Android...
在Android平台上实现类似iPhone的桌面图标抖动效果,可以为用户带来更为丰富的交互体验,尤其在设计删除或移动应用图标等操作时。本教程将详细讲解如何创建这种仿iPhone的抖动动画,以及如何将其应用于Android应用的...
在Android开发中,为了提供与iOS相似的用户体验,开发者经常需要创建自定义控件来模拟iPhone的特定功能。本项目就是一个实例,它实现了一个仿iPhone的滑动控件,特别适用于展示时间或选项选择,就像HTC设备上的时间...
在Android开发中,为了实现与iOS相似的用户体验,有时我们需要为应用中的图标添加"抖动"效果,就像iPhone上的未读消息提示那样。这个“Android仿Iphone抖动效果Shake Icon”就是这样一个功能,它使得Android应用可以...
"android pan iphone el"这个标题可能是指针对这两种平台的跨平台开发,即如何在Android和iPhone之间实现兼容性或者互操作性的技术。下面将详细讨论相关知识点。 1. **跨平台开发** 跨平台开发允许开发者编写一次...
在Android平台上实现类似iPhone的界面是一项技术挑战,但并非不可能。Android系统以其高度的可定制性和开放性,允许开发者通过自定义View来创造出各种各样的界面风格,包括模仿iPhone的UI设计。以下是一些关键的知识...
Android开发 仿iPhone风格对话框示例源码 这个对话框完全继承、仿照AlertDialog,只是实现了自定义效果。 另外,没有实现setIcon,因为iphone中的对话框多数都没有图标。 附件包含例子、jar包、jar包源码。
在Android平台上,开发一款应用程序来模仿iPhone的主题,特别是其主菜单界面,是一个有趣且具有挑战性的实践项目。这个“android 仿iphone主题之主菜单”的示例代码提供了一个实现这一目标的基础框架,并且代码中...
Android 和 iPhone 应用程序界面布局的对比主要集中在四个方面:状态栏、...对于Android和iPhone,适应各自平台的交互逻辑和设计语言是至关重要的,这样才能最大化地发挥每个系统的优点,为用户提供最佳的使用感受。
这个"Android仿iPhone滚动控件源码"就是一个专门用于在Android平台上实现iOS风格滚动效果的开源项目。以下是对该控件及其源码的详细解析。 1. **滚动控件类型**: - 在iOS中,常见的滚动控件有UIScrollView、...
在Android平台上进行应用开发时,有时我们可能会遇到需要模仿其他平台设计的需求,比如高仿iPhone的锁屏界面。本项目就是一个Android源码实现的高仿iPhone锁屏的毕业设计示例,适合计算机科学与技术、软件工程等相关...
本文主要探讨了Android与iPhone在界面布局上的四个关键点:状态栏、标题栏、标签栏和工具栏。 首先,状态栏是两个平台的共通元素,都位于屏幕顶部,便于用户获取设备状态信息。Android的状态栏不仅显示基本状态,还...
在不同平台上,如Android和iOS,QQ都有相应的客户端应用,让用户可以随时随地与他人沟通。 在Android手机上,用户通常可以直接通过QQ应用设置自己的在线状态。然而,这个“Android Iphone QQ 在线”功能则提供了...
在Android开发中,有时我们希望应用的用户界面能够与iPhone的风格保持一致,以提供一致的用户体验或满足特定设计需求。"android中方iphone对话框"这个项目就是针对这一需求的一个解决方案,它允许开发者在Android...
【Android与iPhone应用程序界面布局对比】在软件开发领域,尤其是移动应用开发中,Android和iPhone平台的用户界面设计有着显著的差异。这两种操作系统都有自己独特的设计理念和用户交互方式,这直接影响了开发者在...
在Android平台上实现“仿iPhone滑动解锁”功能,主要涉及到Android UI设计、触摸事件处理以及动画效果的实现。以下是对这个知识点的详细说明: 1. **Android UI设计**: Android系统提供了丰富的UI组件,如...
标题提到的“实现前端、Android、iPhone和Java后端四个平台一致的加密工具”旨在解决跨平台应用间数据加密的一致性问题,使得无论在哪个平台上,数据都能得到相同的加密处理,从而提高安全性并简化开发流程。...