最近写了个iphone的小东西,对xcode也用了段时间,而我原来一直都是java环境下开发,比较起来两者差别很大。

最大差别是IDE对语言的支持。java在eclipse下可以即使的显示语法错误,而objective-c还的build一把才能看到,这个太影响效率。xcode下一个版本改进了llvm后会引入这个feature。eclipse的refactory的功能也很强大,这个在xp开发模式下是必须的,而xcode也没有这个东西。所以objective-c其实拖累了iphone,真是成也萧何,败也萧何。

java在exception情况下会给出详细的调用stack,而xcode的错误信息很少,空指针情况下提示更如天书一样,不清楚这个是语言的局限还是ide的无能。其实界面还是用约束毕竟少的语言,比如弱类型或者动态语言来开发,C和Java过于严肃,很小的错误都会导致程序崩溃,也缺乏灵活性,因为界面是千变万化的,预想好的模型在实际开发中并不能适应所有情况。

UI方面,xcode还是坚持用多窗口的方式,苹果好像对这个情有独钟,一个程序分成多个小的窗口显示,这中非独占式的模式在大显示器下可能有更好的互操作性,因为你可以任意的调整窗口位置,也更节省空间:独占式的会将整个桌面填满。但是有时候则很不方便,比如它的log是单独的窗口显示,大多数情况下这个窗口被代码编辑器(这是个大窗口)挡住,而任务栏上又看不到这个log窗口的图标,这时候想查看log就很不方便。

当然,Interface builder这里就显示了apple的强处,界面非常cool,特别是事件定义时采用拖拉的方式很是直观。Cocoa的界面是独立定义的,然后跟objective-c的类进行绑定(事件绑定和属性绑定)。Swing则是在code中定义界面,纯编程式的,这部分有些IDE可以代劳。

所以最完美的组合是:java + mac的UI库,或者java用javascript代替。当然,已经存在的东西就是不完美的,所以存在的东西就是完美的…..