技术开发 频道

高手Android与iPhone平台开发经历对比 谁更好用?

  【IT168 专稿】几个月前我冒险进入移动开发世界,并创建了一个可以同时运行在Android和iPhone上的应用程序(Hudson Helper),这篇文章着重写的是关于我在开发这个程序时的一些经历,主要集中在Android和iPhone开发工具、平台和开发体验的对比上。

  在你进一步阅读之前,我要指出的是我的对比中存在较大的偏见,因为我有过12年多的Java开发经验,可能我会更偏爱Android。

  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的工具确实有很多选择,并且都比较好用。

0
相关文章