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