精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

iUI框架:用Eclipse開發(fā)iOS Web應用程序

移動開發(fā) iOS
Apple 的 iOS平臺為開發(fā)人員提供了一個有趣的機會。借助其小型的交互式觸摸屏,iPhone 和 iPod Touch 在很短的時間內(nèi)迅速吸引了數(shù)百萬用戶。但是這種新穎的設計和專利平臺給應用程序開發(fā)人員帶來了一系列新的挑戰(zhàn)。在 2008 年 2 月 Apple 發(fā)布其軟件開發(fā)包 (SDK) 以前,想要在該平臺上進行研究的開發(fā)人員必須創(chuàng)建模擬的本機界面外觀的iOS Web 應用程序。

幸運的是,使用一系列新的開源工具可以更輕松地完成這項工作。Aptana 的針對 Eclipse 的 iPhone Development 插件可以生成特定于 iPhone 的項目,并在可旋轉(zhuǎn)取景器中預覽應用程序。Joe Hewitt 的 iUi、層疊樣式表(Cascading Style Sheets,CSS)和 JavaScript 框架包含模擬本機 iPhone 體驗的部件和頁面集。

在本文中,我們使用 Aptana 和 iUi 創(chuàng)建一個新應用程序:針對 iPhone 的簡單 Javadoc 查看器。首先,設計一個在 iPhone 中瀏覽 Javadoc 的用戶界面 (UI),然后創(chuàng)建用于從任何源代碼生成 Javadoc 頁面的定制 doclet。在此過程中將描述針對iOS的 UI 問題,如何使用這些開源工具簡化開發(fā)和調(diào)試,以及 iPhone 開發(fā)的未來趨勢。

工具快速入門

首先安裝 Aptana 并下載 iUi:

  1. 在 Eclipse V3.2 中,選擇 Help > Software Updates > Find and Install
  2. 選擇 Search for new features to install。此窗口列出了可以從中下載插件的站點以及 Eclipse 預定義的插件。
  3. 單擊 New Remote Site 將 Aptana 添加到此列表中,并使用 URL http://update.aptana.com/3.2 對其進行定義。
  4. 從列表中選擇新定義的 Aptana 站點,單擊 Next,然后安裝所有可用功能。完成此窗口安裝基本的 Aptana Editor。
  5. 重新啟動 Eclipse。
  6. 選擇 Window > Open Perspective > Other,然后從窗口選擇 Aptana。工具欄中將顯示一組新圖標。
  7. 單擊主頁圖標。將顯示 Aptana 功能的概覽。
  8. 在 Apple iPhone Development 部分中,單擊 Download and Install
  9. 安裝所有功能,然后完成此窗口以用特定于 iPhone 的功能配置 Aptana。
  10. 重新啟動 Eclipse。
  11. 下載最新版本的 iUi(請參閱 參考資料)。

一切就緒之后,請使用 Eclipse 創(chuàng)建一個名為 iDoc 的新 iPhone Project,如圖 1 所示。

圖 1. 創(chuàng)建新 iPhone Project

創(chuàng)建新 iPhone Project

圖 2 顯示了生成的項目,其中包含簡單 iPhone 應用程序。

圖 2. 在 Eclipse 中生成的 iPhone Project

在 Eclipse 中生成的 iPhone Project

注意由 Aptana 的基本編輯器提供的突出顯示的語法,它支持 HTML、CSS 和 JavaScript。

iPhone Preview 模式和應用服務器

在文本編輯器的底部,您將看到 SourceiPhone Preview 選項卡,以及系統(tǒng)中安裝的所有瀏覽器(例如,Safari PreviewFirefox Preview)。單擊 iPhone Preview 查看示例應用程序在 iPhone 中的外觀。在瀏覽器外部單擊可以旋轉(zhuǎn)電話,單擊電話標題欄可以隱藏導航欄。下面顯示了水平顯示的 iPhone Preview 模式。

圖 3. iPhone Preview 模式下的水平視圖

iPhone Preview 模式下的水平視圖

使用 iPhone Preview 模式可以節(jié)省大量時間:可以快速測試新設計想法并重復進行開發(fā)而無需離開計算機。當應該在實際的 iPhone 上測試您的應用程序時,Aptana 的內(nèi)置應用服務器將十分有用。單擊 Eclipse 工具欄中的Run 圖標啟動服務器。圖 4 顯示了在 Eclipse 中運行的應用服務器。

圖 4. Aptana 的 iPhone Application Server 托管頁面并創(chuàng)建帶有 URL 的電子郵件

Aptana 的 iPhone Application Server 托管頁面并創(chuàng)建帶有 URL 的電子郵件

如果通過 WiFi 連接將 iPhone 連接到本地網(wǎng)絡,則可以訪問服務器窗口中顯示的 URL。單擊 E-mail this url 并向 iPhone 中的電子郵件帳戶發(fā)送一條消息,這可以省去一個步驟。單擊電子郵件中的鏈接,應用程序?qū)⒃?iPhone 的 Web 瀏覽器中啟動。

iUi 演示:劇院清單 Web 應用程序

雖然 Aptana 的啟動應用程序包含特定于 iPhone 的 HTML 和 CSS 文件,但是這些文件的功能有限。一種更好的備用解決方案是使用 iUi 框架,此框架擁有一組豐富的自定義部件和 JavaScript 效果,可以精確地模擬本機 iPhone 界面。

解壓縮已下載的 iUi 發(fā)行版 iui-0.13.tar,然后把文件復制到 Eclipse 的 iDoc Project 中。圖 5 顯示了包含 iUi 的項目。

圖 5. 帶有 iUi 框架和示例項目的 iDoc 項目

帶有 iUi 框架和示例項目的 iDoc 項目

iUi 的演示 Web 應用程序可以在上面展開的 samples 文件夾中找到。其中包括音樂瀏覽器、劇院清單和類似 Digg 的站點。使用 Aptana 的 iPhone Preview 模式,我們可以在 Eclipse 中查看這些組件。圖 6 顯示了劇院清單 Web 應用程序 (samples/theaters/index.html) 的搜索頁面。

圖 6. iUi 的示例劇院清單 Web 應用程序

iUi 的示例劇院清單 Web 應用程序

注意,該演示與本機 iPhone 的界面外觀極為相似。使用這些預打包的部件可以快速開發(fā) iPhone Web 應用程序。

設計 UI

在本例中,將為 iPhone 創(chuàng)建一個名為 iDoc 的 Javadoc 查看器。由 Sun Microsystems 的標準 Javadoc 生成器創(chuàng)建的緊密 HTML 文件在臺式機上一切正常,但是在 iPhone 中卻很難導航和讀取。iDoc 將生成 iPhone 支持的 Javadoc —— 非常適合于在地鐵中瀏覽應用程序編程接口 (API) 或者讓合作的編程團隊中的觀察員幫助解決困難。

iPhone 人機接口指南

在開始設計 iDoc 的 UI 之前,一定要先了解 iPhone 開發(fā)與普通 Web 開發(fā)的不同之處。圖 7 來自 Apple 的 iPhone Dev Center(請參閱 參考資料),很好地總結了兩者的不同之處:手指不是鼠標。這樣做得不到桌面應用程序中的像素精度,但是通過輕敲、輕彈和輕壓將開啟一個豐富的新用戶交互模型。此外,iPhone 與用戶一起移動并且通常用于有干擾的環(huán)境中,因此應用程序需要能夠快速容易地訪問目標信息。

圖 7. 手指不是鼠標

手指不是鼠標

Apple 的 iPhone 人機接口指南(請參閱 參考資料)定義了三種類型的 iPhone Web 內(nèi)容。

 

與 iPhone 中的 Safari 兼容
可以正確顯示的任意類型的 Web 頁面,即使頁面的一部分依賴于諸如 Adobe Flash 或 Java™ applet 之類的不受支持的插件
最適于 iPhone 中的 Safari
為 iPhone 正確縮放內(nèi)容并且不依賴于不受支持插件的 Web 頁面
iPhone 應用程序
通過模擬 iPhone 界面外觀來模擬本機應用程序的 Web 頁面,并且在適當?shù)臅r候,與諸如電話、電子郵件或 Google Maps 之類的 iPhone 服務集成

 

 

標準 Javadoc 頁面屬于第一種類型,與 iPhone 中的 Safari 兼容。這些頁面可以正確顯示,但是要求很好地處理輕壓和輕彈才能找到相關信息。iDoc 針對的是完整的 iPhone 應用程序。雖然不能與其他服務集成,但是 iDoc 的接口能夠在 iPhone 中很好地使用。

iDoc UI

針對 iPhone 進行開發(fā)時,必須只關注 iPhone。應用程序應當快速地完成特定任務,不應該嘗試包括所有可能的功能。使用 iDoc,用戶必須找到關于 Java 類的基本文檔,例如類名、方法名、方法簽名和注釋。通過指向目標詳細信息頁面的三個導航級別顯示這些信息。

 

 

包導航
頂層包
類導航
包內(nèi)的類、接口、異常和錯誤
類細節(jié)導航
類中的描述、字段、構造函數(shù)和方法
詳細信息頁面
注釋、簽名和參數(shù)

 

 

 

為了使 iDoc 保持整齊并且以任務為目的,需要省略一些傳統(tǒng) Javadoc 功能。例如,不顯示包描述注釋。由于這些功能通常不包含有用信息(例如,acme.client 包含客戶機代碼),并且有時被同時省略,因此把它們從 iDoc 中移除并簡化接口就顯得十分有意義。

要獲得三個導航級別,請使用邊對邊 (edge-to-edge) 列表。這是在本機 iPhone 應用程序中常用的構造,用于瀏覽聯(lián)系人、電子郵件和音樂。邊對邊列表將在 44 像素的等高行中顯示項,并且有助于在大量信息中滾動查找。Apple 的 iPhone 人機接口指南 提供了構造邊對邊列表的規(guī)格,包括字體、字體大小和邊框間距。iUi 框架用 CSS 和 JavaScript 語言實現(xiàn)這些規(guī)格,允許您創(chuàng)建像本機 iPhone 組件那樣顯示的簡單 HTML 列表。

清單 1 顯示了頁眉,以及 java.applet 和 java.rmi 包的前兩個導航級別。

清單 1. 帶有頁眉和前兩個導航級別的 HTML 文檔

[[62274]]<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Strict//EN"[[62274]]"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">[[62274]][[62274]]<htmlxmlns="http://www.w3.org/1999/xhtml">[[62274]]<head>[[62274]]<title>iDoc</title>[[62274]]<metaname="viewport"content="width=320;initial-scale=1.0;[[62274]]maximum-scale=1.0;[[62274]]user-scalable=0;"/>[[62275]]<styletype="text/css"media="screen">@import[[62276]]"iui/iui.css";</style>[[62275]]<styletype="text/css"media="screen">@import[[62276]]"iDoc.css";</style>[[62274]]<scripttype="application/x-javascript"[[62274]]src="iui/iui.js"></script>[[62274]]</head>[[62274]][[62274]]<bodyonclick="console.log('Hello',event.target);">[[62274]]<divclass="toolbar">[[62274]]<h1id="pageTitle"></h1>[[62274]]<aid="backButton"class="button"[[62274]]href="#"></a>[[62274]]</div>[[62274]]<ulid="home"title="Packages"selected="true">[[62274]]<li><ahref="#java.applet">java.applet</a></li>[[62274]]<!--morepackages...-->[[62274]]<li><ahref="#java.rmi">java.rmi</a></li>[[62274]]</ul>[[62274]]<ulid="java.applet"title="java.applet">[[62274]]<liclass="group">Interfaces</li>[[62274]]<li><ahref="java.applet.AppletContext.html">[[62274]]AppletContext</a></li>[[62274]]<li><ahref="java.applet.AppletStub.html">[[62274]]AppletStub</a></li>[[62274]]<li><ahref="java.applet.AudioClip.html">[[62274]]AudioClip</a></li>[[62274]]<liclass="group">Classes</li>[[62274]]<li><ahref="java.applet.Applet.html">Applet[[62274]]</a></li>[[62274]]<li><ahref="java.applet.Applet.AccessibleApplet.html">[[62274]]AccessibleApplet</a></li>[[62274]]</ul>[[62274]]<ulid="java.rmi"title="java.rmi">[[62274]]<liclass="group">Interfaces</li>[[62274]]<li><ahref="java.rmi.Remote.html">[[62274]]Remote</a></li>[[62274]]<liclass="group">Classes</li>[[62274]]<li><ahref="java.rmi.MarshalledObject.html">[[62274]]MarshalledObject</a></li>[[62274]]<li><ahref="java.rmi.Naming.html">[[62274]]Naming</a></li>[[62274]]<li><ahref="java.rmi.RMISecurityManager.html">[[62274]]RMISecurityManager</a></li>[[62274]]<liclass="group">Exceptions</li>[[62274]]<li><ahref="java.rmi.AccessException.html">[[62274]]AccessException</a></li>[[62274]]<li><ahref="java.rmi.AlreadyBoundException.html">[[62274]]AlreadyBoundException</a></li>[[62274]]<li><ahref="java.rmi.ConnectException.html">[[62274]]ConnectException</a></li>[[62274]]<li><ahref="java.rmi.ConnectIOException.html">[[62274]]ConnectIOException</a></li>[[62274]]<li><ahref="java.rmi.MarshalException.html">[[62274]]MarshalException</a></li>[[62274]]<li><ahref="java.rmi.NoSuchObjectException.html">[[62274]]NoSuchObjectException</a></li>[[62274]]<li><ahref="java.rmi.NotBoundException.html">[[62274]]NotBoundException</a></li>[[62274]]<li><ahref="java.rmi.RemoteException.html">[[62274]]RemoteException</a></li>[[62274]]<li><ahref="java.rmi.RMISecurityException.html">[[62274]]RMISecurityException</a></li>[[62274]]<li><ahref="java.rmi.ServerError.html">[[62274]]ServerError</a></li>[[62274]]<li><ahref="java.rmi.ServerException.html">[[62274]]ServerException</a></li>[[62274]]<li><ahref="java.rmi.ServerRuntimeException.html">[[62274]]ServerRuntimeException</a></li>[[62274]]<li><ahref="java.rmi.StubNotFoundException.html">[[62274]]StubNotFoundException</a></li>[[62274]]<li><ahref="java.rmi.UnexpectedException.html">[[62274]]UnexpectedException</a></li>[[62274]]<li><ahref="java.rmi.UnknownHostException.html">[[62274]]UnknownHostException</a></li>[[62274]]<li><ahref="java.rmi.UnmarshalException.html">[[62274]]UnmarshalException</a></li>[[62274]]</ul>[[62274]]

圖 8 顯示了使用邊對邊列表生成的頂層選擇包導航級別。

圖 8. 像導航本機 iPhone 應用程序一樣導航 Javadoc 包

像導航本機 iPhone 應用程序一樣導航 Javadoc 包

圖 9 顯示了在 iPhone Preview 模式下顯示的最終的 java.rmi 包。

圖 9. 在 java.rmi 包中導航接口、類和異常

在 java.rmi 包中導航接口、類和異常

對于 iDoc 的目標詳細信息頁面,使用另一種 iPhone 構造:圓角矩形列表。這些列表對于分組信息十分有用,并且 iPhone 中的設置面板都使用這種列表。使用圓角矩形列表可以分隔方法簽名與參數(shù)及異常清單。在 V0.13 中,iUi 只支持將圓角矩形列表用于表單輸入;將其元素用于靜態(tài)文本將生成格式錯誤的塊。 使用定制的 iDoc.css 文件擴展這些 CSS(如清單 2 所示),以添加用于顯示帶有靜態(tài)文本的圓角矩形列表的 textRow 元素。

清單 2. 定制 textRow CSS 擴展以正確顯示靜態(tài)文本

[[62274]]/*AddinganewrowCSSstyletoiUifordisplayingblocksoftext*/[[62274]].textRow{[[62274]]position:relative;[[62274]]border-bottom:1pxsolid#999999;[[62274]]-webkit-border-radius:0;[[62274]]text-align:right;[[62274]]}[[62274]][[62274]].textRow>p{[[62274]]text-align:left;[[62274]]margin:5px8px5px10px;[[62274]]padding:0px0px0px0px;[[62274]]}[[62274]][[62274]][[62274]]fieldset>.textRow:last-child{[[62274]]border-bottom:none!important;[[62274]]}[[62274]]

清單 3 顯示了 java.math.BigDecimal 的一種構造方法的詳細信息頁面。

清單 3. 使用 textRow 元素的 HTML 詳細信息頁面

[[62274]]<divid="java.math.BigDecimal(long,java.math.MathContext)"title="BigDecimal"[[62274]]class="panel">[[62274]]<fieldset>[[62274]]<divclass="textRow"><p><b>[[62274]]publicBigDecimal(long,MathContext)</b></p></div>[[62274]]<divclass="textRow"><p>Translatesa[[62274]]<code>long</code>intoa[[62274]]<code>BigDecimal</code>,withroundingaccordingtothecontextsettings.[[62274]]Thescaleofthe<code>BigDecimal</code>,beforeanyrounding,iszero.[[62274]]</p></div>[[62274]]</fieldset>[[62274]]<h2>Parameters</h2>[[62274]]<fieldset>[[62274]]<divclass="textRow"><p><b>longval[[62274]]</b>:<code>long</code>valuetobeconverted[[62274]]to<code>BigDecimal</code>.</p></div>[[62274]]<divclass="textRow"><p><b>MathContextmc[[62274]]</b>:thecontexttouse.</p></div>[[62274]]</fieldset>[[62274]]<h2>Throws</h2>[[62274]]<fieldset>[[62274]]<divclass="textRow"><p><b>ArithmeticException[[62274]]</b>:iftheresultisinexactbut[[62274]]theroundingmodeis<code>UNNECESSARY</code>.</p></div>[[62274]]</fieldset>[[62274]]</div>[[62274]]

<fieldset> 標記內(nèi)的所有內(nèi)容都位于圓角矩形內(nèi),textRow <div> 用于分隔行。帶有 <h2> 標記的標題顯示為列表上方的組標簽。圖 10 顯示了最終頁面。

圖 10. java.math.BigDecimal 中的構造函數(shù)的詳細視圖

java.math.BigDecimal 中的構造函數(shù)的詳細視圖

擁有三個導航級別和目標詳細信息頁面后,UI 就完成了。iDoc 使用戶可以專注于具體任務。借助 iUi 框架和一些定制的 CSS,它看上去很像本機 iPhone 應用程序。

開發(fā) iDoc

現(xiàn)在已經(jīng)設計了 UI,接下來需要編寫代碼來生成 HTML 文件。創(chuàng)建一個插入到 Sun 的 javadoc 命令中的簡單 doclet。我們的示例將使用標準 java.* 包,但是 iDoc 可以從任何源代碼生成 Javadoc。使用 OpenJDK 源代碼(請參閱 參考資料),因為它可以公開獲得并且 GNU Public License (GPL) V2 許可證允許我們生成和發(fā)布其 Javadoc。

使用 iDoc,只需迭代包和類并調(diào)用方法打印上述格式的靜態(tài) HTML 頁面。清單 4 顯示打印目標詳細信息頁面的方法。

清單 4. 輸出詳細信息頁面的 Doclet 代碼

[[62274]]privatevoidprintDetail(PrintStreamp,ProgramElementDocdoc,[[62275]]Stringid,Stringname){[[62278]]divHeader(p,id,name,"panel");[[62278]]textHeader(p,null);[[62278]]textRow(p,getSignature(doc));[[62278]]textRow(p,getCommentText(doc.commentText()));[[62278]]textFooter(p);[[62279]]if(docinstanceofExecutableMemberDoc){[[62278]]printMethodDetail(p,(ExecutableMemberDoc)doc);[[62280]]}[[62278]]divFooter(p);[[62276]]}[[62274]][[62275]]privatevoidprintMethodDetail(PrintStreamp,ExecutableMemberDocfield){[[62279]]if(field.parameters().length>0){[[62278]]textHeader(p,"Parameters");[[62279]]for(inti=0;i<field.paramTags().length;i++){[[62278]]textRow(p,"<b>"+field.parameters()[i].typeName()+""[[62278]]+field.paramTags()[i].parameterName()[[62278]]+"</b>:"[[62278]]+getCommentText(field.paramTags()[i].parameterComment()));[[62280]]}[[62278]]textFooter(p);[[62280]]}[[62279]]if(field.throwsTags().length>0){[[62278]]textHeader(p,"Throws");[[62279]]for(inti=0;i<field.throwsTags().length;i++){[[62278]]textRow(p,"<b>"+field.throwsTags()[i].exceptionName()[[62278]]+"</b>:"[[62278]]+getCommentText(field.throwsTags()[i].exceptionComment()));[[62280]]}[[62278]]textFooter(p);[[62280]]}[[62276]]}[[62274]]

代碼是通用的,這樣 printDetail() 將處理類描述、字段、構造函數(shù)和方法的輸出。后兩種類型是ExecutableMemberDoc 的子類,因此打印關于其參數(shù)和已拋出異常的附加信息。

性能問題

 

[[62281]]
GZIP 壓縮

一種簡單有效的性能技巧是,在 Web 服務器中啟用 GZIP 壓縮。大多數(shù)現(xiàn)代 Web 服務器都提供此選項,使用該選項將先壓縮頁面,然后再通過電纜發(fā)送給受支持客戶機。Safari on iPhone 就是這些受支持客戶機之一。它支持 GZIP 自動解壓縮。只需在 Web 服務器中啟用 GZIP 壓縮,然后 iPhone 用戶將體驗到更短的下載時間。

Aptana 的 iPhone Preview 模式將幫助調(diào)試輸出文件。在每次迭代后,您可以快速單擊該應用程序查找已設計界面中的不一致性。但是,使用 Preview 模式可以掩蓋性能問題:現(xiàn)代計算機的運行速度比 iPhone 的 620-MHz ARM 處理器快三至五倍。此外,用戶經(jīng)常通過速度慢的蜂窩網(wǎng)絡下載頁面,因此必須用實際 iPhone 運行您的應用程序。

當我在 iPhone 中測試查看 iDoc 時,我發(fā)現(xiàn)輸出一個大型 HTML 文件將導致跳幀和性能下降。要解決此問題,創(chuàng)建一個用于導航包名/類名的主文件,然后為帶有注釋和方法細節(jié)的每個類創(chuàng)建獨立文件(參見清單 5)。雖然此過程將生成大量文件,但是各個文件大小都非常小,并且應用程序運行得十分流暢。

清單 5. Doclet 代碼將迭代每個包,然后為每個類創(chuàng)建文件

[[62274]]out=newFileOutputStream(index);[[62274]]p=newPrintStream(out);[[62274]]printHeader(p);[[62274]][[62274]]PackageDoc[]packages=root.specifiedPackages();[[62274]]Arrays.sort(packages);[[62274]][[62274]]printPackages(p,packages);[[62274]][[62275]]for(inti=0;i<packages.length;i++){[[62278]]printPackageDetail(p,packages[i]);[[62276]]}[[62275]]for(inti=0;i<packages.length;i++){[[62278]]ClassDoc[]classes=packages[i].allClasses();[[62278]]Arrays.sort(classes);[[62279]]for(intj=0;j<classes.length;j++){[[62278]]//Creatingaseparatefileforeachclass.[[62278]]PrintStreamp2=newPrintStream(newFileOutputStream(getFilename(classes[j])));[[62278]]printClassDetail(p2,classes[j]);[[62278]]p2.close();[[62280]]}[[62276]]}[[62274]]printFooter(p);[[62274]]p.close();[[62274]]

運行 iDoc

在經(jīng)過該性能增強之后,就能運行 iDoc 了。為 OpenJDK 中的 51 個 java.* 和 javax.* 包(表示 1,304 個類)生成 Javadoc,然后把所有內(nèi)容上傳到 Web 服務器中。這包括超過 16 MB 的文件,但是主要導航頁面只有 112 KB,并且每個單獨類的詳細信息頁面平均為 13 KB。即使在使用 EDGE 網(wǎng)絡時,應用程序也能夠快速響應。如果您已經(jīng)擁有了 iPhone,請訪問 iDoc 站點(請參閱 參考資料)并嘗試使用,也可以下載 iDoc 來為您自己的代碼庫生成特定于 iPhone 的 Javadoc。圖 11 顯示了最終的應用程序。

圖 11. 用于 iPhone 的全部 51 個包的 Javadoc

用于 iPhone 的全部 51 個包的 Javadoc

可能對 iDoc 進行的擴展包括支持顯示 Java 5 泛型,以及更智能地捕捉 Javadoc 注釋內(nèi)的標記來實現(xiàn)頁面之間的鏈接。如果您有興趣添加 iDoc 的功能,則可以下載完整的源代碼(請參閱 參考資料)。

iPhone 開發(fā)的前景

2007 年 10 月,Steve Jobs 宣稱 Apple 將于 2008 年 2 月發(fā)布 iPhone SDK。詳細信息很少,因為這是在 2007 年 12 月編寫的,但是 SDK 將允許您在不需要使用 Safari 的情況下創(chuàng)建能夠在 iPhone 上本機運行的應用程序。給定 iPhone 底層架構之后,開發(fā)平臺很可能是類似于 Mac OS X 的 Cocoa 和 Objective-C。Apple 主管人員的最新評論暗示第三方應用程序?qū)⑿枰邮苣撤N類型的認證過程。

通過在本機運行,需要高級動畫、圖形和網(wǎng)絡訪問的應用程序?qū)闹蝎@益。不過,即使在發(fā)布了 SDK 之后,iPhone 的 Web 開發(fā)仍會是一個吸引人的主題。Web 應用程序很容易創(chuàng)建和部署。諸如 Aptana 和 iUi 之類的工具簡化了開發(fā),并且能夠快速創(chuàng)建 Web 應用程序。正如 iDoc 所展示的,沒有必要等待 SDK 的發(fā)布:使用現(xiàn)有的工具,您可以創(chuàng)建具有本機界面外觀的全功能 iPhone Web 應用程序。

責任編輯:佚名 來源: zhangziyangup博客
相關推薦

2009-09-22 12:22:54

ibmdwLotus

2014-03-27 10:28:31

移動Web開發(fā)框架

2018-12-03 08:25:24

2019-02-11 09:35:04

Python應用程序Tornado

2013-08-08 09:48:10

Web

2012-03-15 15:02:27

iUI

2009-01-19 11:07:42

C#Web.NET

2011-11-29 16:07:36

移動Web開發(fā)框架移動開發(fā)

2009-05-27 14:31:53

NetBeansEclipsPHP

2011-05-31 15:41:00

Cocoa TouchCocoaiOS

2011-07-21 16:19:30

iOS Twitter

2015-04-14 09:26:52

WebWeb應用程序框架

2023-06-13 13:38:00

FlaskPython

2013-11-19 15:35:01

2009-04-13 11:35:55

IBMdWEclipseJava

2020-03-20 19:37:03

JavascriptWeb前端

2012-03-21 09:36:33

ibmdw

2010-06-12 16:41:10

BlackBerry開

2024-01-02 00:18:56

Buffalo項目Go Web框架

2010-02-06 14:19:26

ibmdwGoogleMap
點贊
收藏

51CTO技術棧公眾號

欧美欧美欧美欧美| 高清成人在线观看| 一区二区三欧美| 在线观看国产中文字幕| 日本美女在线中文版| 国产精品香蕉一区二区三区| 97精品一区二区视频在线观看| 中文在线一区二区三区| 美女网站视频一区| 亚洲综合久久久久| 欧美日韩另类综合| 国产美女明星三级做爰| 国产精品久久久亚洲一区| 中文字幕无线精品亚洲乱码一区 | 欧美一级视频免费观看| 国产精选一区| 精品捆绑美女sm三区| 日日碰狠狠丁香久燥| 成人短视频在线| 久久免费电影网| 亚洲最大av在线| 懂色av蜜臀av粉嫩av分享吧最新章节| 99精品全国免费观看视频软件| 精品久久久久久无| 日本中文字幕影院| 日韩av福利| 亚洲图片有声小说| 影音欧美亚洲| 九色蝌蚪在线| 99热99精品| 91在线中文字幕| 国产女优在线播放| 国产一区二区精品| 欧美富婆性猛交| 成人做爰视频网站| 国产精品美女久久久久久不卡 | 亚洲天堂伊人网| 无人区在线高清完整免费版 一区二| 亚洲综合色自拍一区| 一区二区日本伦理| 91在线网址| 国产日产精品1区| 国产在线视频欧美一区二区三区| av一区二区三| 国产在线国偷精品免费看| 国产精品久久久久999| 国内精品福利视频| 亚洲激情精品| 欧美精品国产精品日韩精品| 日韩一级片av| 亚洲影视一区二区三区| 日韩一区二区久久久| аⅴ天堂中文在线网| 精品美女在线视频| 一色桃子一区二区| 久久日免费视频| 国产欧美日韩精品一区二区三区| 亚洲精品国产精品久久清纯直播 | 最近中文字幕在线观看视频| 校园春色综合网| 欧美亚洲国产视频| 五月婷婷中文字幕| 模特精品在线| 国产精品高潮呻吟久久av野狼| 黄色片视频免费| 日韩专区一卡二卡| 国产一区深夜福利| 99精品视频免费看| 成人avav影音| 久久偷窥视频| se在线电影| 国产精品短视频| 午夜啪啪福利视频| 大香伊人久久| 色综合咪咪久久| 国产视频一区二区视频| 国产精品久久久久77777丨| 欧洲av在线精品| 日韩av.com| 婷婷视频一区二区三区| 亚洲黄色av女优在线观看| 中文字幕国产综合| 97精品一区| 欧美激情综合色| 日韩精品视频免费播放| 久久免费高清| 91免费人成网站在线观看18| 国产1区在线观看| 久久综合五月天婷婷伊人| 五月天亚洲综合小说网| 1区2区在线观看| 精品国产91久久久| 亚洲欧美日韩一级| 538任你躁精品视频网免费| 亚洲精品国产精品国自产在线 | 最新热久久免费视频| 日韩在线视频在线| 欧美大电影免费观看| 制服丝袜激情欧洲亚洲| xxxxxx黄色| 日韩在线欧美| 高清一区二区三区四区五区| 波多野结衣家庭主妇| 国产精品亚洲视频| 欧美性xxxx69| 麻豆蜜桃在线| 欧美丝袜丝交足nylons| 18禁一区二区三区| 日韩系列欧美系列| 91精品国产777在线观看| 亚洲专区第一页| 26uuuu精品一区二区| 美国av在线播放| 91看片一区| 亚洲成年人在线播放| 香蕉久久久久久久| 亚洲欧美日本日韩| 粉嫩精品一区二区三区在线观看 | 国产中文字幕视频在线观看| 欧美成人xxxx| 亚洲男人的天堂在线| 精国产品一区二区三区a片| 奇米影视在线99精品| 久久av免费一区| 污片视频在线免费观看| 欧美日韩一区二区三区在线| www.88av| 在线看片日韩| 亚洲www视频| seseavlu视频在线| 在线视频国产一区| aaaaa一级片| 亚洲国产专区| 国产成人精品一区二区三区福利| 激情影院在线观看| 欧美午夜一区二区三区免费大片| 成人网站免费观看| 99国产精品久久久久久久| 97超碰人人看人人| 二区三区在线观看| 欧美肥胖老妇做爰| 麻豆网址在线观看| 激情综合色综合久久| 日本在线视频不卡| 日韩成人影音| 亚洲欧美日韩爽爽影院| 欧美一级特黄视频| 94色蜜桃网一区二区三区| 国产精品国产对白熟妇| 91精品短视频| 久久久久久午夜| 人妻妺妺窝人体色www聚色窝| 亚洲综合av网| av av在线| 在线国产日韩| 欧美成人一区二区在线| 亚洲三级欧美| 亚洲欧洲在线看| www.亚洲激情| 国产精品久久看| 8x8x成人免费视频| 你懂的成人av| 国产精品一区二区三区四区五区 | 欧美日韩1区2区3区| 99热在线播放| 波多野结衣精品| 日韩成人中文字幕| 三级网站在线播放 | 欧美做爰啪啪xxxⅹ性| 蜜桃91丨九色丨蝌蚪91桃色| 四虎影院一区二区三区| 久久精品资源| 色综合男人天堂| 天天躁日日躁狠狠躁喷水| 色综合天天综合| 最新黄色av网址| 国产成人精品网址| 久久久久久久午夜| 成人看的羞羞网站| 亚洲一区二区三区777| 欧美6一10sex性hd| 日韩毛片在线看| 一区二区三区免费在线| 亚洲最大的成人av| 强伦人妻一区二区三区| 老司机午夜精品99久久| 成人在线免费观看视频网站| 久本草在线中文字幕亚洲| 国产成人在线视频| 97超碰资源站在线观看| 精品视频偷偷看在线观看| 中文字幕资源网| 亚洲一区二区三区在线看| av在线网站观看| 激情小说亚洲一区| 成人毛片视频网站| 91亚洲人成网污www| 国产乱码一区| 日韩福利影视| 欧美伊久线香蕉线新在线| 美女免费久久| 亚洲欧美www| www久久久com| 欧美视频在线一区二区三区| 久久精品欧美一区二区| 中文字幕成人av| 欧产日产国产精品98| 另类欧美日韩国产在线| 欧美日韩在线中文| 欧美黄在线观看| 亚欧精品在线| 香蕉国产成人午夜av影院| 91久久国产婷婷一区二区| 成人av观看| 久久人人爽国产| 五月婷婷视频在线观看| 一区国产精品视频| 性xxxx18| 欧美精品一区二| 国产夫妻自拍av| 欧美日韩一区二区不卡| 久久久成人免费视频| 亚洲一区二区精品视频| 黄色一级大片在线免费观看| 国产欧美一区二区三区鸳鸯浴| 永久免费未满蜜桃| 国产麻豆精品视频| 国产精品自拍视频在线| 视频一区中文字幕| 国产最新免费视频| 亚洲三级影院| 欧美国产综合在线| 欧美午夜一区| 男人日女人的bb| 91成人超碰| 在线亚洲美日韩| 日韩高清欧美| 亚洲v欧美v另类v综合v日韩v| 要久久电视剧全集免费| 精品国产一区二区三区免费| 91精品丝袜国产高跟在线| 91最新在线免费观看| 国产精品一区二区精品| 国产在线久久久| 国产精品99久久久久久董美香 | 日日狠狠久久偷偷四色综合免费 | 亚洲av无码国产精品永久一区 | 桃花色综合影院| 亚洲精品成人久久电影| 少妇精品视频一区二区| 亚洲白拍色综合图区| 亚洲精品字幕在线观看| 亚洲成人免费在线视频| 天天操天天射天天| 亚洲跨种族黑人xxx| 黄色的视频在线免费观看| 国产午夜精品一区二区三区| 国产高清视频免费最新在线| 最近2019中文字幕mv免费看| 亚洲成人影院麻豆| 美女国内精品自产拍在线播放| 超碰公开在线| 久久人人爽人人爽人人片av高请 | 日韩欧美中文字幕在线播放| 亚洲熟女综合色一区二区三区| 色偷偷久久一区二区三区| 波多野结衣一区二区在线| 精品婷婷伊人一区三区三| 91国偷自产中文字幕久久| 91精品婷婷国产综合久久| 亚洲第一黄色片| 亚洲第一精品电影| 久久久久久青草| 神马久久桃色视频| 曰本三级在线| 妖精一区二区三区精品视频| 国产高清在线一区| 欧美日韩破处| 先锋影音日韩| 欧美成熟视频| 成人免费在线小视频| 日本亚洲免费观看| 亚洲一区二区图片| 91小视频在线| 久久国产高清视频| 午夜婷婷国产麻豆精品| 免费又黄又爽又猛大片午夜| 91麻豆精品国产91久久久久| 天天爽夜夜爽夜夜爽| 中文字幕9999| 国产第一页在线视频| 国产激情999| 中文字幕久久精品一区二区| 欧美一区二区福利| 午夜国产精品视频| 欧美日韩一区二区在线免费观看| 韩国毛片一区二区三区| 欲求不满的岳中文字幕| 国产精品不卡一区| 国产成人在线免费视频| 91麻豆精品国产91久久久使用方法| 天堂av一区二区三区| 日韩一区二区三区在线播放| 九色porny丨入口在线| 91精品久久久久久久久久入口 | 欧美日韩国产综合在线| 久久精品免费一区二区三区| 日本免费不卡一区二区| 寂寞少妇一区二区三区| 黄色aaa视频| 亚洲图片有声小说| 国产内射老熟女aaaa∵| 国产性色av一区二区| 国产白丝在线观看| 91精品中文在线| 狠狠色丁香婷婷综合影院| 99热久久这里只有精品| 激情伊人五月天久久综合| 中国女人特级毛片| 精品美女久久久久久免费| 99精品久久久久久中文字幕| 在线亚洲国产精品网| 蜜桃视频在线观看免费视频| 99久久久精品免费观看国产| 首页国产精品| 国产又黄又猛又粗| 久久久噜噜噜久久中文字幕色伊伊 | 特级西西444www高清大视频| 日韩精品在线视频| 成人影院在线视频| 国产日韩精品推荐| 国产精品hd| 91蝌蚪视频在线| **欧美大码日韩| 97精品人妻一区二区三区在线| 一区二区成人av| 欧美日韩五码| 日韩欧美视频一区二区三区四区 | 最新av免费在线观看| 国产欧美日韩另类视频免费观看| 国产 日韩 欧美 在线| 亚洲二区在线播放视频| 69av成人| 国产一区二区三区奇米久涩| 一区在线视频| www国产视频| 婷婷夜色潮精品综合在线| 亚洲国产精品二区| 欧美黄色免费网站| 成人盗摄视频| 日韩伦理在线免费观看| 不卡免费追剧大全电视剧网站| 久久99久久98精品免观看软件 | 香蕉久久久久久av成人| 一区二区三区在线观看动漫| www日本高清| 亚州国产精品久久久| 日本欧美高清| 日韩av在线综合| 国产日韩欧美综合在线| 中文字幕在线观看精品| 久久综合伊人77777蜜臀| 一区二区在线免费播放| 日本熟妇人妻xxxx| 久久蜜桃av一区精品变态类天堂 | 国产亚洲欧美视频| 国产精品xxx| 成人国产一区二区三区| 成人性生交大片| 亚洲图片在线视频| 中文字幕精品视频| 日韩黄色av| 黄在线观看网站| 国产精品亲子伦对白| www.蜜臀av.com| 欧美一级在线亚洲天堂| 成人免费电影网址| 又色又爽又黄18网站| 日韩欧美中文字幕在线播放| 午夜视频在线| 国产精品久久久久久久久久久久午夜片 | 青青艹视频在线| 中文字幕国产一区| 不卡视频在线播放| 国产成人精品一区二区三区| 欧美激情理论| 黄色av网址在线观看| 欧美在线三级电影| 亚洲七七久久综合桃花剧情介绍| 九九九九九九精品| 麻豆成人av在线| 日韩 欧美 综合| 日韩在线视频免费观看高清中文| 爱高潮www亚洲精品| 香蕉视频网站入口| 亚洲一区二区四区蜜桃| 成人午夜电影在线观看| av在线不卡观看| 青青草成人在线观看| 日韩免费观看一区二区|