版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目 錄</b></p><p><b> 摘 要I</b></p><p><b> 關(guān)鍵詞I</b></p><p> AbstractI</p><p> Key wordsII</p><p>&l
2、t;b> 1前言1</b></p><p> 1.1研究背景及意義1</p><p> 1.2移動(dòng)辦公國(guó)內(nèi)外發(fā)展現(xiàn)狀1</p><p> 2開(kāi)發(fā)環(huán)境及相關(guān)技術(shù)2</p><p> 2.1 iOS系統(tǒng)與Objective-C簡(jiǎn)介2</p><p><b> 2.2開(kāi)發(fā)環(huán)境
3、3</b></p><p> 2.2.1 Xcode IDE3</p><p> 2.2.2 iPhone模擬器4</p><p> 2.2.3 Instruments5</p><p> 2.3 運(yùn)行環(huán)境5</p><p> 2.3.1 iPhone的硬件規(guī)格5</p>
4、<p> 2.3.2 iPhone在線(xiàn)辦公上的優(yōu)勢(shì)5</p><p> 2.3.3 iPhone的不足6</p><p> 2.4 技術(shù)簡(jiǎn)介6</p><p> 2.4.1 MVC模式6</p><p> 2.4.2 iOS內(nèi)存管理7</p><p> 2.4.3單例、委托、通知、bl
5、ock7</p><p> 3 軟件體系架構(gòu)與設(shè)計(jì)8</p><p> 3.1軟件整體架構(gòu)設(shè)計(jì)9</p><p> 3.2功能性需求分析與設(shè)計(jì)10</p><p> 3.2.1網(wǎng)絡(luò)通信模塊10</p><p> 3.2.2登錄模塊10</p><p> 3.2.3首頁(yè)模塊
6、10</p><p> 3.2.4車(chē)牌錄入模塊11</p><p> 3.2.5派卡記錄查詢(xún)模塊11</p><p> 3.2.6套餐報(bào)價(jià)查詢(xún)模塊12</p><p> 3.2.7設(shè)置模塊12</p><p> 4 項(xiàng)目功能實(shí)現(xiàn)13</p><p> 4.1啟動(dòng)界面動(dòng)畫(huà)實(shí)
7、現(xiàn)13</p><p> 4.2網(wǎng)絡(luò)與數(shù)據(jù)13</p><p> 4.2.1網(wǎng)絡(luò)通信模塊實(shí)現(xiàn)13</p><p> 4.2.2 JSON數(shù)據(jù)解析實(shí)現(xiàn)14</p><p> 4.3登錄模塊14</p><p> 4.3.1用戶(hù)登錄子模塊實(shí)現(xiàn)14</p><p> 4.4登陸
8、模塊實(shí)現(xiàn)15</p><p> 4.4.1登陸實(shí)現(xiàn)15</p><p> 4.4.2備案功能實(shí)現(xiàn)17</p><p> 4.5智能拍照識(shí)別功能實(shí)現(xiàn)17</p><p> 4.6定位功能實(shí)現(xiàn)18</p><p> 4.7檢測(cè)更新功能實(shí)現(xiàn)19</p><p> 5項(xiàng)目性能測(cè)試
9、及運(yùn)行情況20</p><p> 5.1項(xiàng)目性能測(cè)試20</p><p> 5.2項(xiàng)目運(yùn)行情況21</p><p><b> 總結(jié)22</b></p><p><b> 參考文獻(xiàn)23</b></p><p><b> 致謝24</b>
10、;</p><p> 基于iOS的派卡系統(tǒng)設(shè)計(jì)與應(yīng)用</p><p><b> 摘 要</b></p><p> 網(wǎng)絡(luò)技術(shù)與移動(dòng)技術(shù)推動(dòng)了移動(dòng)互聯(lián)網(wǎng)的迅速發(fā)展,導(dǎo)致新一代移動(dòng)端設(shè)備的迅速發(fā)展,在這種背景下移動(dòng)辦公應(yīng)運(yùn)而生,從而漸漸改變了人們的辦公方式,也改變著傳統(tǒng)的工作模式。移動(dòng)辦公為自主辦公提供了便捷,使它成為當(dāng)前新工作模式的主流。&
11、lt;/p><p> 本文在分析國(guó)內(nèi)外相關(guān)研發(fā)狀況的基礎(chǔ)上,設(shè)計(jì)了一款基于iOS平臺(tái)的APP辦公應(yīng)用,之后也逐步實(shí)現(xiàn)了這一設(shè)計(jì)。該應(yīng)用根據(jù)移動(dòng)辦公過(guò)程中的特點(diǎn),從用戶(hù)需求分析開(kāi)始,通過(guò)移動(dòng)辦公系統(tǒng)課題的研究和開(kāi)發(fā),實(shí)現(xiàn)了車(chē)牌信息查詢(xún)錄入、查詢(xún)派卡記錄統(tǒng)計(jì)、套餐實(shí)時(shí)報(bào)價(jià)查詢(xún)等功能。系統(tǒng)中用到的理論知識(shí)和相關(guān)技術(shù)進(jìn)行了詳細(xì)介紹,并介紹了設(shè)計(jì)和用戶(hù)體驗(yàn)上的具體優(yōu)化,給出了APP的性能測(cè)試。</p><
12、p><b> 關(guān)鍵詞</b></p><p> 移動(dòng)技術(shù);iPhone;iOS ;APP </p><p> Paika System Design and Application Based on iOS</p><p><b> Abstract</b></p><p> Net
13、work technology and Mobile technology promoted the rapid development of mobile Internet,led to the rapid development of a new generation of mobile terminal equipment. Under this background, Mobile office arises, it gradu
14、ally changed the way of people's work, and changed the traditional working mode.The Mobile office provides a convenience for independent office, make it become the mainstream of the current new work mode. </p>
15、<p> In this paper, on the base of analyzing the situation which is related to research and development in domestic and overseas, I designed an APP office application that is based on the IOS, and also realize the
16、 design gradually. This application is according to the characteristics in the process of mobile office, starting from the analysis of user’s demand. It realized the query and input of license plate information, the stat
17、istics of querying sent card’s record, the query of package which can of</p><p><b> Key words</b></p><p> Mobile technology;iPhone;iOS;APP</p><p><b> 1前言</b&
18、gt;</p><p> 1.1研究背景及意義</p><p> 隨著移動(dòng)網(wǎng)絡(luò)時(shí)代的來(lái)臨,手機(jī)、平板電腦、上網(wǎng)本等移動(dòng)終端迅速發(fā)展,市場(chǎng)不斷擴(kuò)大,用戶(hù)群也在不斷擴(kuò)大。又移動(dòng)網(wǎng)絡(luò)寬帶飛躍式的增長(zhǎng),3G、4G、WiFi網(wǎng)絡(luò)的普及,為移動(dòng)設(shè)備的發(fā)展注入了新的動(dòng)力。</p><p> 當(dāng)人們?cè)趥鹘y(tǒng)的辦公形式中,通過(guò)紙質(zhì)、電腦等途徑辦公的時(shí)候。辦公效率的問(wèn)題,一直困擾著
19、人們。就在這時(shí)候,在線(xiàn)辦公已經(jīng)悄悄的走到身邊。移動(dòng)在線(xiàn)辦公輕松的解決了傳統(tǒng)模式的辦公難題,員工不管在哪都能夠享受到實(shí)時(shí)辦公。信息實(shí)時(shí)的優(yōu)勢(shì)、以及更多的選擇和便利性,是目前的移動(dòng)在線(xiàn)辦公正顛覆傳統(tǒng)辦公方式的三大有利因素。十年前你想聽(tīng)實(shí)時(shí)辦公可能是白日夢(mèng),那互聯(lián)網(wǎng)發(fā)展的今天,這些都成為了可能。很多歐美國(guó)家已普遍接受在線(xiàn)辦公的模式,這種依托在線(xiàn)辦公系統(tǒng)完成工作的活動(dòng),擺脫了空間和時(shí)間限制的優(yōu)勢(shì)是當(dāng)前辦公技術(shù)領(lǐng)域的研究熱點(diǎn)。</p>
20、<p> 目前人們大多還是在臺(tái)式不可移動(dòng)設(shè)備上辦公,就在近幾年移動(dòng)設(shè)備的優(yōu)勢(shì)越來(lái)越明顯,接近與臺(tái)式機(jī)的性能同時(shí)又兼具移動(dòng)便攜性,人們開(kāi)始依賴(lài)這些設(shè)備生活。2007年美國(guó)蘋(píng)果公司的iPhone發(fā)布后,給移動(dòng)教育解決了這一大難題。紛紛有美國(guó)、新加坡、法國(guó)、英國(guó)等多個(gè)國(guó)家開(kāi)始將iPhone引用進(jìn)辦公系統(tǒng)中,并引起了員工強(qiáng)大的興趣。通過(guò)這種辦公方式節(jié)省了成本,提高了效率,減少了紙質(zhì)文檔的印刷,為環(huán)保做了貢獻(xiàn),也讓人們對(duì)iPhon
21、e有了新的認(rèn)識(shí)。本課題的研究是在以C/S模式設(shè)計(jì)和開(kāi)發(fā)基于iPhone的移動(dòng)辦公系統(tǒng),目的在于改造現(xiàn)有的辦公模式,同時(shí)在可移動(dòng)使用的iPhone設(shè)備上通過(guò)流媒體(在線(xiàn)視頻)技術(shù)來(lái)呈現(xiàn)生動(dòng)形象的辦公內(nèi)容,自由自主的辦公環(huán)境,提高員工的辦公效率,激發(fā)出員工對(duì)工作的熱情,其關(guān)鍵是iPhone客戶(hù)端應(yīng)用軟件開(kāi)發(fā)。</p><p> 1.2移動(dòng)辦公國(guó)內(nèi)外發(fā)展現(xiàn)狀</p><p> 業(yè)界早有共識(shí):
22、1990到2000年是PC的十年;2000到2010年是互聯(lián)網(wǎng)的十年;2010年之后的十年將是移動(dòng)互聯(lián)網(wǎng)的十年!如今,聯(lián)想柳傳志聲稱(chēng)要用社交網(wǎng)絡(luò)做業(yè)務(wù),萬(wàn)科王石和京東劉強(qiáng)東在美國(guó)用iPad、手機(jī)遙控自家企業(yè),此時(shí),作為企業(yè)管理者,還站在移動(dòng)互聯(lián)的門(mén)外,顯然是落伍的。 當(dāng)下,對(duì)于企業(yè)而言,移動(dòng)互聯(lián)網(wǎng)最初的顛覆就是高效的信息流轉(zhuǎn),以求與物流、資金流形成合力,目前,全球已有24%的機(jī)構(gòu)完全接受了移動(dòng)辦公方式。預(yù)計(jì)2014年這一比例將達(dá)到83
23、%。但是,在中國(guó),老板們還有心病難除。最近的研究表明,員工喜歡移動(dòng)辦公,老板卻未必買(mǎi)賬。老板的心結(jié)是顯而易見(jiàn)的:一則懷疑員工到底有沒(méi)有在“上班”,二則唯恐企業(yè)有緊急工作時(shí)找不到人。這些心病恰恰反映了保守派企業(yè)的短處:管理思想墨守成規(guī),管理方法不具有包容性和應(yīng)變能力。數(shù)家高薪民營(yíng)企業(yè)的實(shí)踐表明,對(duì)從事許多項(xiàng)目的員工實(shí)行移動(dòng)辦公,不僅可以降低辦公成本,還能大幅提升辦公效率,更沒(méi)有“找不到人”的時(shí)候。事實(shí)上,移動(dòng)辦公反而是考察員工責(zé)任心和效率
24、的試金石,就像Cisco 的調(diào)查顯示,其3/5 的員工說(shuō)他們的工作效率與是否在辦公室無(wú)關(guān),超過(guò)38%的人認(rèn)</p><p> 2開(kāi)發(fā)環(huán)境及相關(guān)技術(shù)</p><p> 2.1 iOS系統(tǒng)與Objective-C簡(jiǎn)介</p><p> iOS是由蘋(píng)果公司開(kāi)發(fā)的移動(dòng)操作系。蘋(píng)果公司在2007年公布了這個(gè)操作系統(tǒng),現(xiàn)在iPhone、iPhone、iPod touch等
25、設(shè)備上均使用改移動(dòng)操作系統(tǒng)。它屬于類(lèi)Unix內(nèi)核的商業(yè)操作系統(tǒng),具有較強(qiáng)得內(nèi)存管理能力,能同時(shí)運(yùn)行多款軟件。</p><p> iOS 操作系統(tǒng)支持多點(diǎn)觸控,可與系統(tǒng)進(jìn)行基本手勢(shì)交互,包括滑動(dòng)(swiping)、輕按(tapping)、擠壓(pinehing)及旋轉(zhuǎn)(fntating)。iOS 層次架構(gòu)如圖2.1所示,iOS 大體上可以分為以下四個(gè)層次。</p><p> 圖2.1
26、iOS分層架構(gòu)圖</p><p> 、Core OS 核心層:包含Accelerate Framework、External Accessory Framework、Security Framework、System等幾個(gè)框架,為其他方法類(lèi)的使用提供基礎(chǔ)功能,比如:硬件驅(qū)動(dòng)、內(nèi)存管理、線(xiàn)程管理、文件系統(tǒng)、網(wǎng)絡(luò)以及標(biāo)準(zhǔn)輸入輸出等。</p><p> 、Core Services核心服務(wù)層
27、:包含Address Book Framework、CFNetwork Framework、Core Data Framework、Core Foundation Framework、Core Location Framework、Core Media Framework、Core Telephony Framework、Event Kit Framework、Foundation Framework、Mobile Core Servi
28、ces Framework、Quick Look Framework、Store Kit Framework、System Configuration Framework、Block Objects、Grand Central Dispatch 、In App Purchase、Location Services、SQLite、XML Support等一些框架,為系統(tǒng)中的其他應(yīng)用提供基本系統(tǒng)服務(wù),同時(shí)也提供了很多有
29、用的方法類(lèi),如:SQLite數(shù)據(jù)庫(kù)、iCloud存儲(chǔ)、定位、聯(lián)網(wǎng)以及一些安全服務(wù)等。</p><p> 、Mediah媒體層:包含Core Graphics、Core Animation、OpenGL ES、Core Text、Image I/O、Assets Library Framework、Media Player Framework、AV Foundation、OpenAL、Core Audio Fra
30、meworks、AV Foundation、Core Media等,提供了一些媒體技術(shù),包括圖形圖像技術(shù)、 視音頻技術(shù)、 核心動(dòng)畫(huà)技術(shù)等</p><p> 、Cocoa Touch 觸摸層:包括Address Book UI Framework、Event Kit UI Framework、Game Kit Framework、iAd Framework、Map Kit Framework、Message UI
31、 Framework、UIKit Framework等等,它們是任何應(yīng)用程序的關(guān)鍵架構(gòu),所有應(yīng)用程序里面的各種組件都來(lái)自于此,此外還提供了多任務(wù)處理、多點(diǎn)觸控、圖片文字的輸出顯示、文件的存取以及加速計(jì)等功能。</p><p> iOS項(xiàng)目開(kāi)發(fā)時(shí)所使用的語(yǔ)言是Objeelive-C和Cocoa編程。Objective-C是—種擴(kuò)充C的面向?qū)ο蟮木幊涕_(kāi)發(fā)語(yǔ)言,極度簡(jiǎn)化了C++語(yǔ)言,Cocoa是對(duì)Objeelive-
32、C的高級(jí)封裝,可以大量簡(jiǎn)化開(kāi)發(fā)者的工作量。Objective-C 語(yǔ)言有三個(gè)主要特點(diǎn),首先是有消息傳遞模型,其次是動(dòng)態(tài)能力,最后是內(nèi)存管理。</p><p> Objective-C通過(guò)支持類(lèi)定義,方法以及屬性的語(yǔ)法,還有其他可以提高類(lèi)的動(dòng)態(tài)擴(kuò)展能力的結(jié)構(gòu)等,擴(kuò)展提升了標(biāo)準(zhǔn)的 ANSIC語(yǔ)言?,F(xiàn)在Objective-C 主要應(yīng)用于Mac OS X和i0S這兩個(gè)NeXTSTEP的派生系統(tǒng),為了在iPhone上面開(kāi)
33、發(fā) C/S 模式的應(yīng)用,就必須使用Objective-C語(yǔ)言編寫(xiě)iOS應(yīng)用。</p><p><b> 2.2開(kāi)發(fā)環(huán)境</b></p><p> 2.2.1 Xcode IDE</p><p> 目前iOS應(yīng)用開(kāi)發(fā)唯一的開(kāi)發(fā)工具就是Xcode,Xcode6.1是目前最新版本,它是蘋(píng)果公司向開(kāi)發(fā)人員提供的集成開(kāi)發(fā)環(huán)境,必須運(yùn)行在Mac OS
34、系統(tǒng)下。它可用于管理工程、編寫(xiě)代碼、構(gòu)建可執(zhí)行文件、進(jìn)行源碼級(jí)調(diào)試、進(jìn)行源代碼倉(cāng)庫(kù)管理、進(jìn)行性能調(diào)節(jié)、應(yīng)用發(fā)布工具等一系列開(kāi)發(fā)工具,可以滿(mǎn)足應(yīng)用開(kāi)發(fā)中的各種需要。Xcode支持了多種語(yǔ)言編寫(xiě)的程序,包括C、C++、Java、Objective-C等,而且每種語(yǔ)言的編譯速度都很快。Xcode IDE是Xcode集成開(kāi)發(fā)環(huán)境主要的組成部分,開(kāi)發(fā)過(guò)程中的大部分工作都是使用Xcode IDE來(lái)完成。圖2.2是Xcode6.1的主界面。最新的Xc
35、ode IDE將功能融為一體,主要的功能有編譯器、Fix-it、Interface Builder、源代碼編輯器。</p><p> a)編譯器。Xcode IDE集成了強(qiáng)大的Objective-C、C、Java、C++開(kāi)源LLVM編譯器,使得可以生成iPhone、iPhone、iPod Touch等產(chǎn)品調(diào)試用的app。.</p><p> b)Fix-it。在開(kāi)發(fā)的過(guò)程中難免會(huì)因?yàn)槭?/p>
36、忽造成一些語(yǔ)法錯(cuò)誤,這時(shí)Fix-it就有了它的用武之地,它能夠立即提醒開(kāi)發(fā)者所犯的代碼錯(cuò)誤,這對(duì)開(kāi)發(fā)的效率有非常大的提高。</p><p> c)Interface Builder。在開(kāi)發(fā)過(guò)程中,開(kāi)發(fā)者需要構(gòu)建很多所需的UI界面,Interface Builder能夠很快速的生成UI界面,并且能夠?qū)崿F(xiàn)代碼與界面的功能鏈接。</p><p> 圖2.2 Xcode6.1主界面</
37、p><p> d)源代碼編輯器。在編寫(xiě)iPhone應(yīng)用過(guò)程中,為了使每個(gè)方法每個(gè)變量一目了然,開(kāi)發(fā)者不得不使用較長(zhǎng)的名字來(lái)分辨它們。源代碼編輯器具有智能的代碼補(bǔ)全功能,它還有代碼折疊、語(yǔ)法高亮、消息起泡等很多實(shí)用功能。</p><p> 2.2.2 iPhone模擬器</p><p> iPhone模擬器即iOS Simulator,在開(kāi)發(fā)過(guò)程中我們需要查看代碼在
38、設(shè)備中的形態(tài),iOS Simulator的運(yùn)行結(jié)果基本跟真機(jī)相似,它有完整的iOS設(shè)備的不同版本與不同機(jī)型,非常方便的讓我們可以在很多機(jī)型上面測(cè)試,解決了我們需要很多真機(jī)設(shè)備測(cè)試的需求,也是調(diào)試屏幕適配的重要工具。由于電腦缺少了部分硬件所以少數(shù)功能是iOS Simulator不能完成的,比如:定位、加速計(jì)、相機(jī)、打電話(huà)、3G網(wǎng)絡(luò)等功能,所以有一臺(tái)真機(jī)進(jìn)行測(cè)試也是必不可少的。</p><p> 2.2.3 Ins
39、truments</p><p> 為了讓?xiě)?yīng)用盡可能完善,在開(kāi)發(fā)的同時(shí)需要保證應(yīng)用是否存在閃退等一系列內(nèi)存泄漏問(wèn)題,也要保證用戶(hù)體驗(yàn)要好。這時(shí)Instruments起到了重要的作用,在iOS應(yīng)用程序運(yùn)行在真機(jī)或者是模擬器上時(shí),可以利用Instruments環(huán)境分析性能。Instruments會(huì)清晰的記錄應(yīng)用程序的行為,可以查看內(nèi)存分配等重要指標(biāo)。這些數(shù)據(jù)都可以很方便我們對(duì)程序的評(píng)估和修改,在很大程度上提升了程序
40、的健壯性。</p><p><b> 2.3 運(yùn)行環(huán)境</b></p><p> 2.3.1 iPhone的硬件規(guī)格</p><p> 由蘋(píng)果公司官方在線(xiàn)商店(http://store.apple.com/cn)得到iPhone不同型號(hào)的硬件規(guī)格,表2.1所示:</p><p> 表2.1 iPhone硬件規(guī)格&
41、lt;/p><p> 2.3.2 iPhone在線(xiàn)辦公上的優(yōu)勢(shì)</p><p> iPhone的優(yōu)勢(shì)之一就是便攜,在地鐵、在公交、在路上,隨時(shí)隨地非常方便。iPhone的尺寸相對(duì)于電腦來(lái)說(shuō)很小,也很輕,但是iPhone的內(nèi)容遠(yuǎn)遠(yuǎn)大于一個(gè)圖書(shū)館,對(duì)于工作者而言能夠大大的減輕負(fù)擔(dān)。iPhone兼具經(jīng)濟(jì)性與環(huán)保性,如果公司將iPhone應(yīng)用于辦公中,將傳統(tǒng)的紙質(zhì)辦公、電腦辦公裝進(jìn)iPhone,不
42、僅減輕了員工的公文包,降低了紙質(zhì)材料印刷費(fèi),無(wú)疑在經(jīng)濟(jì)和環(huán)保問(wèn)題上都做的貢獻(xiàn)。在室外我們更是可以通過(guò)實(shí)時(shí)查看數(shù)據(jù)的方式,了解需要自己實(shí)時(shí)處理的問(wèn)題,也方便辦公者查看和辦公。APP store擁有許多不同的iPhone應(yīng)用,各種辦公方式,激發(fā)人們對(duì)辦公的熱情。目前APP store里iPhone辦公類(lèi)應(yīng)用很多。iPhone改變了人們的信息錄入習(xí)慣,讓人們可以用手指與顯示屏觸摸和滑動(dòng)輸入,讓使用者更加直觀(guān)明了,縮短了使用者與機(jī)器的距離。iP
43、hone改變了人們對(duì)技術(shù)的觀(guān)念,為新一代電子設(shè)備打下基礎(chǔ),如今時(shí)尚科技已經(jīng)滲入我們的生活。</p><p> 2.3.3 iPhone的不足</p><p> 優(yōu)點(diǎn)和缺點(diǎn)總是相互存在著,iPhone也不例外。價(jià)格是iPhone的硬傷,雖然中國(guó)GDP在不斷的增長(zhǎng),但是對(duì)于多數(shù)家庭來(lái)說(shuō)花四五千去買(mǎi)一臺(tái)電子設(shè)備還是會(huì)顯得昂貴。iPhone開(kāi)發(fā)之初就是面向個(gè)人的通信設(shè)備,至今主要還是娛樂(lè)和社交
44、功能,因此在思想不夠成熟的時(shí)候很容易分散辦公者注意力。iPhone等電子設(shè)備很多畫(huà)面都采用明亮的色彩,視覺(jué)刺激過(guò)于強(qiáng)烈,長(zhǎng)時(shí)間的觀(guān)看會(huì)引影響人體健康。iPhone不支持移動(dòng)存儲(chǔ)設(shè)備,在離開(kāi)WIFI的環(huán)境中想要分享數(shù)據(jù)顯得很不方便。iPhone是現(xiàn)階段移動(dòng)辦公輔助工具在業(yè)界的最高水準(zhǔn),如今市場(chǎng)上也出現(xiàn)了很多手機(jī),如基于A(yíng)ndroid系統(tǒng)的小米、華為、三星等,基于WP系統(tǒng)的諾基亞、HTC、三星等。雖然有部分設(shè)備硬件性能、便攜性上超越了同期的
45、iPhone,但是是應(yīng)用的數(shù)量與質(zhì)量、用戶(hù)體驗(yàn)、續(xù)航能力、性?xún)r(jià)比等還是不能和iPhone比擬的。因此只要合理使用,在條件允許的情況下iPhone是移動(dòng)辦公的不二良選。</p><p><b> 2.4 技術(shù)簡(jiǎn)介</b></p><p> 2.4.1 MVC模式</p><p> MVC全名是Model View Controller,是模
46、型(model)-視圖(view)-控制器(controller)的縮寫(xiě),也是構(gòu)成這種框架的三個(gè)部分如圖2.3所示。MVC是一種軟件設(shè)計(jì)的典范思想,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,降低耦合,可以說(shuō)任何一個(gè)完整的應(yīng)用都是由MVC構(gòu)成的。</p><p> a)Model(模型)是應(yīng)用程序中用于處理應(yīng)用程序數(shù)據(jù)邏輯的部分,通常模型對(duì)象負(fù)責(zé)在數(shù)據(jù)庫(kù)中存取數(shù)據(jù)。模型不需要知道數(shù)據(jù)是怎樣被試圖呈現(xiàn)的,也
47、不關(guān)心是怎樣被控制器操作的。</p><p> 圖2.3 MVC框架圖</p><p> b)View(視圖)是應(yīng)用程序中處理數(shù)據(jù)顯示的部分。通常視圖是依據(jù)模型數(shù)據(jù)創(chuàng)建的。視圖不能直接與數(shù)據(jù)通信,使用dataSourcr接口從控制器獲取數(shù)據(jù)信息。</p><p> c)Controller(控制器)是應(yīng)用程序中處理用戶(hù)交互的部分。通??刂破髫?fù)責(zé)從視圖讀取數(shù)據(jù)
48、,控制用戶(hù)輸入,并向模型發(fā)送數(shù)據(jù)。在iOS程序開(kāi)發(fā)過(guò)程中視圖和控制器之間的通信是固定的,主要通過(guò)outlet和action來(lái)實(shí)現(xiàn)。</p><p> 在MVC架構(gòu)下,視圖和模型是兩個(gè)完全獨(dú)立的成分,以控制器為中介進(jìn)行交互者,兩者沒(méi)有直接的聯(lián)系。開(kāi)發(fā)者編寫(xiě)的對(duì)象可以很容易劃分到其中的某個(gè)部分,也就是低耦合,這種模式適用與大多數(shù)語(yǔ)言編程,不僅僅是Objective-C。</p><p>
49、2.4.2 iOS內(nèi)存管理</p><p> 程序運(yùn)行時(shí),開(kāi)辟的內(nèi)存空間。使用它,釋放它的過(guò)程,寫(xiě)的好的程序盡可能少使用內(nèi)存。Objective-C的內(nèi)存管理機(jī)制與.Net/Java那種全自動(dòng)的垃圾回收機(jī)制是不同的,它本質(zhì)上還是C語(yǔ)言中的手動(dòng)管理方式,只不過(guò)稍微加了一些自動(dòng)方法。內(nèi)存管理模式基于對(duì)象的“所有權(quán)”上。任何對(duì)象都會(huì)被有一個(gè)或多個(gè)使用者引用,只要對(duì)象還有一個(gè)使用者,該對(duì)象就應(yīng)該繼續(xù)存在。如果一個(gè)對(duì)象沒(méi)
50、有使用者了,系統(tǒng)將自動(dòng)銷(xiāo)毀它。為了讓開(kāi)發(fā)者清晰的了解:使用對(duì)象和不再使用對(duì)象的場(chǎng)景,Cocoa設(shè)置了以下策略:</p><p> (1)管好自己創(chuàng)建的對(duì)象。開(kāi)發(fā)者使用alloc、new、copy和mutableCopy來(lái)創(chuàng)建對(duì)象。</p><p> (2)使用retain來(lái)獲得對(duì)象的所有權(quán)。某個(gè)函數(shù)接受的對(duì)象,通常保證在該函數(shù)調(diào)用期間仍然可用,并可以安全返回對(duì)象給上層調(diào)用者。開(kāi)發(fā)者在以
51、下兩種情況下使用retain</p><p> a在“訪(fǎng)問(wèn)函數(shù)”(accessor)的實(shí)現(xiàn)中或者在init方法,為了將對(duì)象作為自己的屬性。</p><p> b防止對(duì)象被其他操作釋放掉,從而變?yōu)闊o(wú)效的對(duì)象。</p><p> (3)當(dāng)你不在需要的時(shí)候,必須放棄對(duì)象所有權(quán)。</p><p> 2.4.3單例、委托、通知、block<
52、;/p><p> 單例設(shè)計(jì)模式Singleton,單例模式的意思就是只有一個(gè)實(shí)例,單例模式確保某一個(gè)類(lèi)只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例,這個(gè)類(lèi)稱(chēng)為單例類(lèi)。單例模式的要點(diǎn)有三個(gè);一是某個(gè)類(lèi)只能有一個(gè)實(shí)例;二是它必須自行創(chuàng)建這個(gè)實(shí)例;三是它必須自行向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。單例模式的優(yōu)點(diǎn)有:實(shí)例控制:Singleton 會(huì)阻止其他對(duì)象實(shí)例化其自己的 Singleton 對(duì)象的副本,從而確保所有對(duì)象都訪(fǎng)
53、問(wèn)唯一實(shí)例。靈活性:因?yàn)轭?lèi)控制了實(shí)例化過(guò)程,所以類(lèi)可以更加靈活修改實(shí)例化過(guò)程。在objective-c中要實(shí)現(xiàn)一個(gè)單例類(lèi),至少需要做以下四個(gè)步驟:</p><p> a)為單例對(duì)象實(shí)現(xiàn)一個(gè)靜態(tài)實(shí)例,并初始化,然后設(shè)置成nil?! )實(shí)現(xiàn)一個(gè)實(shí)例構(gòu)造方法檢查上面聲明的靜態(tài)實(shí)例是否為nil,如果是則新建并返回一個(gè)本類(lèi)的實(shí)例?! )重寫(xiě)allocWithZone方法,用來(lái)保證其他人直接使用alloc和init
54、試圖獲得一個(gè)新實(shí)力的時(shí)候不產(chǎn)生一個(gè)新實(shí)例。 d)適當(dāng)實(shí)現(xiàn)allocWitheZone,copyWithZone,release和autorelease。</p><p> delegate中文叫做委托,通常會(huì)用在class內(nèi)部把一些事件處理"委托"給別人去完成。委托設(shè)計(jì)模式的實(shí)質(zhì)就是指針的傳遞。傳遞指針的問(wèn)題在于,對(duì)方持有了對(duì)象指針之后是不安全也不合理的,因?yàn)楫?dāng)有了對(duì)象指針就可以操作對(duì)象
55、中任何內(nèi)容,所以這時(shí)候采用委托就很好的避免了對(duì)指針的操作。舉個(gè)例子,XML Parser可能他知道怎么parse xml,但是parse到的東西要怎么處理xml parser可能不知道。所以NSXMLParser就提供了一個(gè)NSXMLParserDelegate給client去實(shí)作,當(dāng)parse到某個(gè)element的時(shí)候,就callback delegate所定義的message, 讓他client自己去決定怎么去處理這個(gè)e
56、lement。</p><p> 通知即NSNotificationCenter,是專(zhuān)門(mén)供程序中不同類(lèi)間的消息通信而設(shè)置的。每個(gè)運(yùn)行中的application都有一個(gè)NSNotificationCenter的成員變量,它的功能就類(lèi)似公共欄。對(duì)象注冊(cè)關(guān)注某個(gè)確定的notification(如果有人撿到一只小狗,就去告訴我)。我們把這些注冊(cè)對(duì)象叫做observer。其它的一些對(duì)象會(huì)給center發(fā)送notifica
57、tions(我撿到了一只小狗)。center將該notifications轉(zhuǎn)發(fā)給所有注冊(cè)對(duì)該notification感興趣的對(duì)象。我們把這些發(fā)送notification的對(duì)象叫做poster。</p><p> block的實(shí)際行為和Function很像,最大的差別是在可以存取同一個(gè)Scope的變量值。block實(shí)體形式如下:</p><p> ^(傳入?yún)?shù)列){行為主體};</
58、p><p> block實(shí)體開(kāi)頭是“^”,接著是由小括號(hào)所包起來(lái)的參數(shù)列(比如 int a,int b,int c),行為主體由大括號(hào)包起來(lái),專(zhuān)有名字叫做block literal。行為主體可以用return回傳值,類(lèi)型會(huì)被compiler自動(dòng)辨別。如果沒(méi)有參數(shù)列要寫(xiě)成: ^(void)。</p><p> 3 軟件體系架構(gòu)與設(shè)計(jì)</p><p> 3.1軟件整體
59、架構(gòu)設(shè)計(jì)</p><p> 派卡系統(tǒng)平臺(tái)iPhone客戶(hù)端的構(gòu)建完全遵循MVC的設(shè)計(jì)模式,同時(shí)構(gòu)建基于iOS系統(tǒng)的軟件所使用的SDK都是遵循MVC設(shè)計(jì)模式的。根據(jù)公司需求,軟件首先需要實(shí)現(xiàn)與服務(wù)器之間的數(shù)據(jù)通信,然后軟件框架分為派卡首頁(yè)、派卡記錄統(tǒng)計(jì)、信息查詢(xún)錄入、套餐實(shí)時(shí)報(bào)價(jià)等模塊,具體框架如圖3.1。</p><p> 圖3.1 客戶(hù)端功能模塊圖</p><p
60、> 框架采用基于C/S模式的三層架構(gòu),分別是:用戶(hù)界面層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久層。界面層主要由iPhone客戶(hù)端完成,業(yè)務(wù)邏輯層在web服務(wù)器上,數(shù)據(jù)層主要是寫(xiě)本地?cái)?shù)據(jù)庫(kù)和緩存。</p><p> 3.2功能性需求分析與設(shè)計(jì)</p><p> 3.2.1網(wǎng)絡(luò)通信模塊</p><p> 網(wǎng)絡(luò)通信是本應(yīng)用軟件的基本支撐,通過(guò)訪(fǎng)問(wèn)網(wǎng)絡(luò)得知服務(wù)器數(shù)據(jù)的變化,從
61、而呈現(xiàn)不同的課程也界面功能。當(dāng)網(wǎng)絡(luò)通信故障、或者網(wǎng)絡(luò)切換時(shí),需要有相應(yīng)的提示信息告知用戶(hù)。</p><p><b> 3.2.2登錄模塊</b></p><p> 用戶(hù)登錄功能是本應(yīng)用軟件的一項(xiàng)基本功能,用戶(hù)必須在登錄狀態(tài)下進(jìn)行查詢(xún)、錄入等功能。在一定得時(shí)間內(nèi),應(yīng)用軟件會(huì)保存用戶(hù)的登錄狀態(tài),勉強(qiáng)了用戶(hù)反復(fù)登錄的麻煩。用戶(hù)必須輸入公司發(fā)放的用戶(hù)名和密碼組合,使用虛擬
62、鍵盤(pán)登錄。會(huì)在本地判斷輸入信息是否合法,然后發(fā)送給服務(wù)器比較。服務(wù)器返回“登錄成功”時(shí)登入系統(tǒng),否則提示錯(cuò)誤,需要重新登錄。</p><p> 用戶(hù)注冊(cè)模塊是為了用戶(hù)使用本應(yīng)用軟件的特殊功能的通道,用戶(hù)登陸時(shí),同一個(gè)賬號(hào)只能激活一臺(tái)iPhone手機(jī),若再激活另外設(shè)備,則需要進(jìn)行系統(tǒng)備案,需要后天進(jìn)行審批。應(yīng)用軟件登錄模塊的實(shí)際圖如圖3.2所示。</p><p> 圖3.2 用戶(hù)登錄子模
63、塊實(shí)際圖</p><p><b> 3.2.3首頁(yè)模塊</b></p><p> 系統(tǒng)首頁(yè)界面是用戶(hù)登陸之后看見(jiàn)的第一個(gè)界面,派卡首頁(yè)是需要登錄才能查看的界面,通過(guò)相應(yīng)的操作可以跳轉(zhuǎn)到相應(yīng)的功能模塊。課程首頁(yè)分為車(chē)牌錄入、套餐查詢(xún)和記錄統(tǒng)計(jì)。其中套餐查詢(xún)是由服務(wù)器返回套餐分類(lèi)以及詳情查看的模塊,記錄統(tǒng)計(jì)將由服務(wù)器返回之前的派卡記錄,接下來(lái)的就是本系統(tǒng)的車(chē)牌錄入模塊
64、,車(chē)牌錄入是通過(guò)車(chē)牌信息進(jìn)行相關(guān)操作的模塊。派卡首頁(yè)模塊的實(shí)際圖如圖3.3所示。</p><p> 圖3.3 派卡首頁(yè)模塊實(shí)際圖</p><p> 3.2.4車(chē)牌錄入模塊</p><p> 車(chē)牌錄入模塊是本應(yīng)用軟件重點(diǎn)功能,車(chē)牌錄入模塊是通過(guò)輸入相應(yīng)車(chē)牌,查找相應(yīng)車(chē)牌信息,對(duì)之前有過(guò)記錄的車(chē)牌信息進(jìn)行顯示,已經(jīng)聯(lián)系人的添加以及修改,通過(guò)添加派卡記錄,可對(duì)相應(yīng)車(chē)
65、牌的客戶(hù)進(jìn)行禮品贈(zèng)券的派發(fā)以及記錄。其中車(chē)牌的輸入可以通過(guò)手動(dòng)輸入或者通過(guò)拍照識(shí)別車(chē)牌進(jìn)行操作,拍照識(shí)別是通過(guò)手機(jī)拍照,然后截取圖片,將圖片傳入底層C++模塊,讓底層C++識(shí)別車(chē)牌,然后返回識(shí)別出來(lái)的車(chē)牌。車(chē)牌錄入模塊的實(shí)際圖如圖3.4所示。</p><p> 圖3.4 車(chē)牌錄入模塊實(shí)際圖</p><p> 3.2.5派卡記錄查詢(xún)模塊</p><p> 派卡記
66、錄查詢(xún)模塊是客戶(hù)端通過(guò)post請(qǐng)求,與服務(wù)器后天進(jìn)行數(shù)據(jù)交互,獲得之前該登陸賬號(hào)的派發(fā)記錄,然后通過(guò)界面的形式,將數(shù)據(jù)顯示出來(lái)。能給讓用戶(hù)對(duì)自己之前的派發(fā)記錄有一個(gè)了解。派卡記錄查詢(xún)模塊的實(shí)際圖如圖3.5所示。</p><p> 圖3.5 派卡記錄查詢(xún)模塊實(shí)際圖</p><p> 3.2.6套餐報(bào)價(jià)查詢(xún)模塊</p><p> 套餐報(bào)價(jià)查詢(xún)模塊是本應(yīng)用軟件的對(duì)現(xiàn)
67、有套餐顯示的界面,在用戶(hù)在進(jìn)行派卡之余可以通過(guò)套餐資訊了解相應(yīng)的套餐信息,增加用戶(hù)的知識(shí)面。從了提高用戶(hù)對(duì)套餐的了解,更好的服務(wù)客戶(hù)。給用戶(hù)帶來(lái)一個(gè)較好的使用體驗(yàn),會(huì)有眼前一新的感覺(jué)。套餐報(bào)價(jià)查詢(xún)模塊的實(shí)際圖如圖3.6所示。</p><p> 圖3.6套餐報(bào)價(jià)查詢(xún)模塊實(shí)際圖</p><p><b> 3.2.7設(shè)置模塊</b></p><p&g
68、t; 設(shè)置模塊包含版本更新,默認(rèn)車(chē)牌前綴設(shè)置以及緩存,其中首次登錄更新緩存。設(shè)置模塊的實(shí)際圖如圖3.7所示。</p><p> 圖3.7設(shè)置模塊實(shí)際圖</p><p><b> 4 項(xiàng)目功能實(shí)現(xiàn)</b></p><p> 4.1啟動(dòng)界面動(dòng)畫(huà)實(shí)現(xiàn)</p><p> 啟動(dòng)界面在iOS Apps中比較常見(jiàn),也包括一些
69、桌面應(yīng)用程序,就是啟動(dòng)應(yīng)用軟件的時(shí)候看到的第一個(gè)界面。iPhone啟動(dòng)界面分為兩種方式,一種是使用系統(tǒng)自帶的,按規(guī)則定義啟動(dòng)圖片名稱(chēng)即可,顯示為1秒,要想延長(zhǎng)時(shí)間,用[nsthread ? sleepForTimeInterval:5.0] ,另一種就是自定義uiivew,加到window中去。由于本應(yīng)用軟件想給用戶(hù)一個(gè)不一樣的體驗(yàn),同時(shí)也向用戶(hù)加入了一個(gè)微廣告的目的。所以在不影響應(yīng)用軟件正常啟動(dòng)效果的情況下,采用了兩種方式相結(jié)合。即在
70、應(yīng)用軟件按方式一添加啟動(dòng)畫(huà)面的同時(shí),在A(yíng)ppDelegate.m對(duì)象內(nèi)的application didFinishLaunchingWithOptions方法里面加入了一個(gè)UIView動(dòng)畫(huà),再使用NSTimer讓動(dòng)畫(huà)結(jié)束后隱藏啟動(dòng)畫(huà)面。這樣即有了良好的用戶(hù)體驗(yàn),又加入了不會(huì)讓用戶(hù)反感的微廣告。這種做法已經(jīng)被業(yè)界接受,很多應(yīng)用軟件都嘗試著在這樣做。</p><p><b> 4.2網(wǎng)絡(luò)與數(shù)據(jù)</b
71、></p><p> 4.2.1網(wǎng)絡(luò)通信模塊實(shí)現(xiàn)</p><p> 網(wǎng)絡(luò)通信模塊負(fù)責(zé)實(shí)現(xiàn)服務(wù)器與客戶(hù)端之間的數(shù)據(jù)通信功能,iOS系統(tǒng)的網(wǎng)絡(luò)通信對(duì)象是NSURLConnection,NSURLConnection提供對(duì)網(wǎng)絡(luò)異步加載請(qǐng)求的支持,并且將獲取的數(shù)據(jù)返回給代理方法connection didReceiveData。提供了簡(jiǎn)單的接口去創(chuàng)建和取消連接,同時(shí)使用delegate方
72、法去支持連接過(guò)程的反饋和控制 。在實(shí)際開(kāi)發(fā)中直接用的不多,所以對(duì)NSURLConnection進(jìn)行了封裝,實(shí)現(xiàn)了DownLoad類(lèi)和DownLoadFinish類(lèi)。在原有單條數(shù)據(jù)通信外,實(shí)現(xiàn)了多線(xiàn)程下載,也就是同時(shí)多條數(shù)據(jù)下載。DownLoadFinish為單例類(lèi),整個(gè)應(yīng)用軟件中使用的DownLoadFinish都是同一個(gè)對(duì)象,方便了對(duì)服務(wù)器通信的管理。日常生活中,用戶(hù)可能在不同的網(wǎng)絡(luò)環(huán)境下使用應(yīng)用軟件,因此使用了Reachabilit
73、y和netReachability來(lái)檢測(cè)網(wǎng)絡(luò)環(huán)境的連接情況,Reachability給定了三種網(wǎng)絡(luò)狀態(tài),如表4.1所示。應(yīng)用軟件啟動(dòng)的同時(shí)會(huì)對(duì)網(wǎng)絡(luò)環(huán)境進(jìn)行檢查,在A(yíng)ppDelegate.m中完成此工作。在應(yīng)用軟件運(yùn)行的過(guò)程中,應(yīng)用軟件會(huì)對(duì)網(wǎng)絡(luò)連接</p><p> 表4.1 Reachability三種網(wǎng)絡(luò)狀態(tài)</p><p> 在應(yīng)用軟件中,檢測(cè)網(wǎng)絡(luò)環(huán)境的相關(guān)核心代碼如下所示。<
74、;/p><p> a)檢測(cè)當(dāng)前網(wǎng)絡(luò)環(huán)境是否是WiFi</p><p> + (BOOL)IsEnableWIFI {</p><p> return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);</p><p>&
75、lt;b> }</b></p><p> b)檢測(cè)當(dāng)前網(wǎng)絡(luò)環(huán)境是否是3G</p><p> + (BOOL)IsEnable3G {</p><p> return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReac
76、hable);</p><p><b> }</b></p><p> 4.2.2 JSON數(shù)據(jù)解析實(shí)現(xiàn)</p><p> 本應(yīng)用軟件的服務(wù)器采用Web Service部署,客戶(hù)端與服務(wù)端使用HTTP協(xié)議進(jìn)行數(shù)據(jù)通信,使用get或者post方法與服務(wù)器交互,最終返回JSON格式數(shù)據(jù)。JSON指的是JavaScript對(duì)象表示法(JavaS
77、cript Object Notation),是輕量級(jí)的文本數(shù)據(jù)交換格式,獨(dú)立于語(yǔ)言和平臺(tái),具有自我描述性。從iOS5開(kāi)始,APPLE提供了對(duì)JSON的原生支持(NSJSONSerialization),但是為了兼容以前的iOS版本,可以使用第三方庫(kù)來(lái)解析JSON。JSON解析常見(jiàn)的iOS解析方法有TouchJson、 SBJson 、JSONKit 和 iOS5所支持的原生的JSON方法等,其中系統(tǒng)的API的解析速度最快,我們?cè)诠こ添?xiàng)
78、目中選擇使用。</p><p><b> 4.3登錄模塊</b></p><p> 4.3.1用戶(hù)登錄子模塊實(shí)現(xiàn)</p><p> 本應(yīng)用軟件用戶(hù)登錄子模塊主要實(shí)現(xiàn)用戶(hù)賬號(hào)密碼信息的輸入、驗(yàn)證,最終完成登錄。由于用戶(hù)賬號(hào)密碼的保密性,登錄數(shù)據(jù)請(qǐng)求參數(shù)做了加密處理,可以有效的保護(hù)用戶(hù)隱私。登錄請(qǐng)求參數(shù)見(jiàn)表4.2,用戶(hù)登錄核心方法見(jiàn)表4.3。
79、</p><p> 表4.2 登錄請(qǐng)求參數(shù)表</p><p> 表4.3 登錄核心方法表</p><p> 用戶(hù)登錄子模塊使用了UITextField、UIImageView、UIButton、UIAlertView等控件進(jìn)行視圖的布局,應(yīng)用軟件登錄子模塊的實(shí)際圖如圖4.1所示。</p><p> 圖4.1 用戶(hù)登錄子模塊實(shí)際圖<
80、;/p><p><b> 4.4登陸模塊實(shí)現(xiàn)</b></p><p><b> 4.4.1登陸實(shí)現(xiàn)</b></p><p> 登陸需要的UUID是由KeychainItemWrapper第三方封裝實(shí)現(xiàn),首先,簡(jiǎn)單介紹一下UDID這個(gè)東西:UDID是Unique Device Identifier的簡(jiǎn)稱(chēng),也就是唯一設(shè)備標(biāo)識(shí)
81、的意思。于iOS SDK中取得的方法是UIDevice的一個(gè)叫uniqueIdentifier的NSString*,由于這個(gè)ID字符串是基于設(shè)備的,應(yīng)用開(kāi)發(fā)人員可以通過(guò)獲取此ID來(lái)用于記錄區(qū)分設(shè)備。正是由于這個(gè)特性,可能會(huì)導(dǎo)致一些隱私等等相關(guān)的問(wèn)題,Apple于iOS5中將這個(gè)UDID廢掉了,SDK中被標(biāo)記為了Deprecated,雖然為了兼容低版本的源代碼而繼續(xù)存在,但并不會(huì)再返回任何有實(shí)際意義的東西。</p><
82、p> 在做派卡登陸這個(gè)功能時(shí),發(fā)現(xiàn)還是需要用到可以識(shí)別設(shè)備的東西的,對(duì)設(shè)備經(jīng)行備案,使一個(gè)賬號(hào)只能激活一臺(tái)設(shè)備,經(jīng)過(guò)一段時(shí)間的研究、試驗(yàn),發(fā)現(xiàn)了這個(gè)應(yīng)該還算是比較靠譜的方法……</p><p> 其實(shí)早在UDID被deprecated的消息剛出來(lái)時(shí),就已經(jīng)有很多人開(kāi)始研究對(duì)策了,我也google到了各種五花八門(mén)的解決方案,最后還是覺(jué)得這個(gè)UUID的方案比較合適,畢竟是蘋(píng)果官方文檔里推薦的替換UDID的方
83、法.</p><p> 關(guān)于UUID的具體說(shuō)明可以查看下面參考文章中給出的蘋(píng)果官方文檔鏈接。簡(jiǎn)單來(lái)說(shuō),UUID就是一個(gè)隨機(jī)序列字符串生成器,有點(diǎn)像Microsoft Windows的COM GUID生成器的作用,比起自己隨機(jī)一個(gè)字符串的好處就是這東西能夠保證唯一性,適用于標(biāo)記。這樣的做法把生成的ID保存起來(lái),下次再用的時(shí)候就直接讀取已經(jīng)保存的ID了。顯然,那個(gè)UUID生成只是個(gè)“隨機(jī)字符串”生成器,并不能像UD
84、ID那樣保證每次取得的串都一樣!保存起來(lái)雖然能保證用戶(hù)再次打開(kāi)這個(gè)應(yīng)用時(shí),能夠獲得一致的標(biāo)識(shí)ID,但不能保證用戶(hù)刪除應(yīng)用重新安裝后這個(gè)ID的一致性,因?yàn)镹SUserDefaults只是個(gè)像游戲存檔一樣的東西,游戲刪了,存檔也就跟著一塊刪了。所以,這個(gè)“存存檔”的方法并不是一個(gè)比較完善的解決方案,一個(gè)更好的做法是利用keychain保存這個(gè)生成的UUID。</p><p> KeychainItemWrapper
85、 *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"deviceIdentifier" accessGroup:nil];</p><p> NSString *uniqueIdentifier = [wrapper objectForKey:(id)kSecAttrAccount];</p><p&
86、gt; NSLog(@"device_identifier:%@",uniqueIdentifier);</p><p> if ([uniqueIdentifier isEqualToString:@""]) {</p><p> [wrapper setObject:getuuid() forKey:(id)kSecAttrAccount]
87、;</p><p><b> }</b></p><p> uniqueIdentifier = [wrapper objectForKey:(id)kSecAttrAccount];</p><p> [wrapper release]; </p><p> 4.4.2備案功能實(shí)現(xiàn)</p>&l
88、t;p> 備案功能主要賬號(hào)第一次登入手機(jī)無(wú)需備案,如更換手機(jī)則需進(jìn)行申報(bào)備案、審批。備案也同樣需要UUID。</p><p><b> 代碼如下:</b></p><p> KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"device
89、Identifier" accessGroup:nil];</p><p> NSString *uniqueIdentifier = [wrapper objectForKey:(id)kSecAttrAccount];</p><p> if ([uniqueIdentifier isEqualToString:@""]) {</p>&
90、lt;p> [wrapper setObject:getuuid() forKey:(id)kSecAttrAccount];</p><p><b> }</b></p><p> uniqueIdentifier = [wrapper objectForKey:(id)kSecAttrAccount];</p><p> [w
91、rapper release];</p><p> NSString *strUrl = [NSString stringWithFormat:@"uname=%@&DeviceID=%@",_textfield.text,uniqueIdentifier];</p><p> [_dlm addDownLoadWithURLString:kADDDEVIC
92、ELOGAPI_URL andType:8 andPost:YES andPostStr:strUrl];</p><p> 4.5智能拍照識(shí)別功能實(shí)現(xiàn)</p><p> 智能拍照識(shí)別是通過(guò)相機(jī)拍照,通過(guò)第三方庫(kù)對(duì)照片進(jìn)行處理,將圖片傳入底層核心C++,底層通過(guò)對(duì)圖片處理,對(duì)圖片中車(chē)牌的符號(hào)一個(gè)識(shí)別,然后將識(shí)別結(jié)果傳回,得到照片車(chē)牌的車(chē)牌號(hào)碼。拍照識(shí)別功能的實(shí)際圖如圖4.2所示。<
93、;/p><p> 圖4.2 拍照識(shí)別功能實(shí)際圖</p><p><b> 4.6定位功能實(shí)現(xiàn)</b></p><p> 定位功能通過(guò)蘋(píng)果自帶的定位功能,由于蘋(píng)果在iOS8.0+下CLLocationManager定位服務(wù)需要授權(quán)。在Info.plist文件還要加上NSLocationWhenInUseUsageDescription這個(gè)key
94、,Value可以為空,。</p><p> 定位功能核心代碼如下:</p><p> - (void)maplocation</p><p><b> {</b></p><p> _locationManager = [[CLLocationManager alloc] init];</p>&l
95、t;p> if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined) {</p><p> #ifdef __IPHONE_8_0</p><p> if ([_locationManager respondsToSelector:@selector(requestAlw
96、aysAuthorization)])</p><p><b> {</b></p><p> [_locationManager performSelector:@selector(requestAlwaysAuthorization)];//用這個(gè)方法,plist中需要NSLocationAlwaysUsageDescription</p>&l
97、t;p><b> }</b></p><p> if ([_locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)])</p><p><b> {</b></p><p> [_locationManager p
98、erformSelector:@selector(requestWhenInUseAuthorization)];//用這個(gè)方法,plist里要加字段</p><p><b> }</b></p><p><b> #endif</b></p><p><b> }</b></p>
99、<p><b> // 設(shè)置代理</b></p><p> _locationManager.delegate = self;</p><p> // 定位的頻率(位置變化多少發(fā)送)</p><p> _locationManager.distanceFilter = kCLDistanceFilterNone;</p
100、><p> // 定位的精準(zhǔn)(十米誤差)</p><p> _locationManager.desiredAccuracy = kCLLocationAccuracyBest;</p><p><b> // 開(kāi)始更新位置</b></p><p> [_locationManager startUpdatingLo
101、cation];</p><p><b> }</b></p><p> // 當(dāng)位置更新時(shí)調(diào)用此方法</p><p> - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations</p><p
102、><b> { </b></p><p> //此處locations存儲(chǔ)了持續(xù)更新的位置坐標(biāo)值,取最后一個(gè)值為最新位置,如果不想讓其持續(xù)更新位置,則在此方法中獲取到一個(gè)值之后讓locationManager stopUpdatingLocation</p><p> CLLocation *currentLocation = [locations
103、lastObject];</p><p> CLLocationCoordinate2D coor = currentLocation.coordinate;</p><p><b> //經(jīng)度</b></p><p> _CompLongitudeTextField.text = [NSString stringWithFormat:@
104、"%f",coor.longitude];</p><p><b> //緯度</b></p><p> _CompLatitudeTextField.text = [NSString stringWithFormat:@"%f",coor.latitude];</p><p> CLGeocod
105、er *geocoder = [[CLGeocoder alloc] init];</p><p> [geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) {</p><p> CLPlacemark *firstPlacemar
106、k=[placemarks firstObject];</p><p> _paikeplaceTextField.text=firstPlacemark.name;</p><p> NSLog(@"地址:%@",_paikeplaceTextField.text);</p><p><b> }];</b><
107、/p><p> [_locationManager stopUpdatingLocation];</p><p><b> }</b></p><p> 4.7檢測(cè)更新功能實(shí)現(xiàn)</p><p> 檢測(cè)更新是通過(guò)獲取當(dāng)前使用APP的版本以及服務(wù)器中APP的最新版本,通過(guò)兩者的比較,如果服務(wù)器中APP的版本號(hào)比當(dāng)前使用的
108、APP的版本號(hào)高,則可進(jìn)行版本更新。檢測(cè)更新功能的實(shí)際圖如圖4.3所示。</p><p> 圖4.3 拍照識(shí)別功能實(shí)際圖</p><p> 5項(xiàng)目性能測(cè)試及運(yùn)行情況</p><p><b> 5.1項(xiàng)目性能測(cè)試</b></p><p> 本應(yīng)用軟件是iPhone版的,固然不支持iPad設(shè)備。所有的iPhone硬件
109、性能、屏幕分辨率、屏幕尺寸等可能會(huì)不一樣,但是開(kāi)發(fā)人員最關(guān)心的是屏幕寬高比。目前所有iPhone的型號(hào)相對(duì)Android來(lái)說(shuō)很少,所有開(kāi)發(fā)人員不用花太多力氣去適配屏幕。在測(cè)試的過(guò)程中也減少了跨終端測(cè)試,所以測(cè)試數(shù)據(jù)要穩(wěn)定很多。但是由于網(wǎng)絡(luò)環(huán)境的千差萬(wàn)別加上時(shí)間與條件的限制,本應(yīng)用軟件沒(méi)有進(jìn)行大規(guī)模的針對(duì)網(wǎng)絡(luò)環(huán)境的測(cè)試。本應(yīng)用軟件測(cè)試其他性能均使用WiFi網(wǎng)絡(luò)環(huán)境,使用iPhone Air硬件設(shè)備。重點(diǎn)的測(cè)試對(duì)象是內(nèi)存泄漏測(cè)試、與服務(wù)器數(shù)
110、據(jù)匹配測(cè)試、用戶(hù)體驗(yàn)測(cè)試、基本功能測(cè)試,內(nèi)存測(cè)試使用Instruments工具,如圖5.1所示:</p><p> 圖5.1 Instruments內(nèi)存檢測(cè)圖</p><p> 測(cè)試發(fā)現(xiàn)視頻播放有輕微的內(nèi)存泄漏,查找原因發(fā)現(xiàn)是重復(fù)創(chuàng)建播放對(duì)象產(chǎn)生的,將對(duì)象做為全局的對(duì)象只alloc一次解決了問(wèn)題。</p><p> 在應(yīng)用軟件重復(fù)測(cè)試的時(shí)候發(fā)現(xiàn)了閃退的問(wèn)題,后
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于ios的派卡系統(tǒng)設(shè)計(jì)與應(yīng)用-畢業(yè)設(shè)計(jì)
- 基于ios的派卡系統(tǒng)設(shè)計(jì)與應(yīng)用畢業(yè)設(shè)計(jì)
- 基于ios平臺(tái)點(diǎn)菜系統(tǒng)設(shè)計(jì)與開(kāi)發(fā)說(shuō)明書(shū)
- 基于ios的點(diǎn)餐系統(tǒng)說(shuō)明書(shū)
- 基于ios的圖片標(biāo)注系統(tǒng)說(shuō)明書(shū)
- 基于ios的學(xué)籍信息管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)說(shuō)明書(shū)
- 基于ios的歷史人物查詢(xún)應(yīng)用說(shuō)明書(shū)
- 基于ios的騰訊qq說(shuō)明書(shū)
- 基于ios系統(tǒng)的流媒體學(xué)習(xí)資源研究與開(kāi)發(fā)說(shuō)明書(shū)
- 基于ios的新浪微博設(shè)計(jì)說(shuō)明書(shū)
- 基于ios的畢業(yè)跟蹤管理系統(tǒng)教師端說(shuō)明書(shū)
- 基于ios的汽車(chē)租賃平臺(tái)說(shuō)明書(shū)
- 基于ios的超級(jí)猜圖說(shuō)明書(shū)
- 基于ios的天氣預(yù)報(bào)查詢(xún)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)說(shuō)明書(shū)畢業(yè)論文
- 基于ios的駕考寶典開(kāi)發(fā)說(shuō)明書(shū)
- 基于ios系統(tǒng)的教務(wù)應(yīng)用設(shè)計(jì)
- 基于ios的網(wǎng)絡(luò)音樂(lè)播放器設(shè)計(jì)說(shuō)明書(shū)
- 基于ios平臺(tái)的移動(dòng)應(yīng)用開(kāi)發(fā)--消防安全指南說(shuō)明書(shū)
- 基于ios平臺(tái)的移動(dòng)應(yīng)用開(kāi)發(fā)--消防安全指南說(shuō)明書(shū)
- 德派森系統(tǒng)說(shuō)明書(shū)(設(shè)備)
評(píng)論
0/150
提交評(píng)論