你可以吃蛋糕也可以吃。
您可以通过使用实例轻松地混合 Web 和原生应用程序UIWebView
,例如在 Cocoa/Objective-C 代码中实现对性能敏感的部分,并将 WebKit 视图插入到将过于耗时而无法重写为原生应用程序的部分中。
如果您想要 App Store 分发,您甚至可以将整个 Web 应用程序包装在本机包中 - 请参阅PhoneGap。
如果用户将您的页面添加到他的主屏幕,您还可以开发看起来不像是通过 Safari 启动的纯 Web 应用程序- 请参阅jQTouch。
缺点:
Web 应用程序可能没有原生应用程序那么快,尽管借助 HTML5 离线支持和 WebKit 特定的扩展(如过渡和动画),您可以走得更远。确保使用触摸事件- Safari 延迟onclick
。
很难让纯 Web 应用程序感觉像适当的原生应用程序。例如,移动 WebKit 不支持position:fixed
需要复制顶部导航栏,并且 Web 视图的滚动速度与表格视图不同。它是可修复的,但需要大量的 JavaScript。
好处:
快速发展。当我不得不在UIView
s 中复制应用程序时,我真的很欣赏 CSS/HTML 对复杂布局的有用性(InterfaceBuilder 仅适用于半固定布局)。
你可以避免苹果突然讨厌和禁止另一件事。如果他们从 AppStore 中删除您的应用,您可以让用户通过网络访问它(谷歌通过 Voice 和 Latitude 应用做到了这一点)。
将网络应用程序移植到 Android 和其他(WinMo、HP Pre、最新的 BlackBerries 等)更容易。Apple 排名第一,但其思想份额与市场份额不成正比。其他人正在迎头赶上。
如果你选择原生
你必须按照 Apple 的方式来做:Objective-C 和 Cocoa(你可以用纯 C 或 C++ 来做部分应用程序)。有很多关于这个主题的教程和书籍,所以我不会在这里重复它们。只是一些随机的建议:
plists,尽管是“本机”iPhone 格式,但并不是客户端-服务器通信的最佳选择。即使按照 XML 标准,XML plist 也有很高的开销,并且二进制 plist 可能很难生成和调试。JSON实际上更快,通常更容易使用。
如果您只获取少量信息,NSConnection
只会使事情复杂化。您可以简单地使用[NSData dataWithContentsOfURL:]
in 方法启动 via performSelectorInBackground:
。
UITableView
滚动时不发送通知。如果您想在表格中延迟加载图片,请使用回调加载和设置它们。