版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
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)辦公國內(nèi)外發(fā)展現(xiàn)狀1</p><p> 2開發(fā)環(huán)境及相關(guān)技術(shù)2</p><p> 2.1 iOS系統(tǒng)與Objective-C簡介2</p><p><b> 2.2開發(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在線辦公上的優(yōu)勢(shì)5</p><p> 2.3.3 iPhone的不足6</p><p> 2.4 技術(shù)簡介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首頁模塊
6、10</p><p> 3.2.4車牌錄入模塊11</p><p> 3.2.5派卡記錄查詢模塊11</p><p> 3.2.6套餐報(bào)價(jià)查詢模塊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)畫實(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用戶登錄子模塊實(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> 本文在分析國內(nèi)外相關(guān)研發(fā)狀況的基礎(chǔ)上,設(shè)計(jì)了一款基于iOS平臺(tái)的APP辦公應(yīng)用,之后也逐步實(shí)現(xiàn)了這一設(shè)計(jì)。該應(yīng)用根據(jù)移動(dòng)辦公過程中的特點(diǎn),從用戶需求分析開始,通過移動(dòng)辦公系統(tǒng)課題的研究和開發(fā),實(shí)現(xiàn)了車牌信息查詢錄入、查詢派卡記錄統(tǒng)計(jì)、套餐實(shí)時(shí)報(bào)價(jià)查詢等功能。系統(tǒng)中用到的理論知識(shí)和相關(guān)技術(shù)進(jìn)行了詳細(xì)介紹,并介紹了設(shè)計(jì)和用戶體驗(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í)代的來臨,手機(jī)、平板電腦、上網(wǎng)本等移動(dòng)終端迅速發(fā)展,市場(chǎng)不斷擴(kuò)大,用戶群也在不斷擴(kuò)大。又移動(dòng)網(wǎng)絡(luò)寬帶飛躍式的增長,3G、4G、WiFi網(wǎng)絡(luò)的普及,為移動(dòng)設(shè)備的發(fā)展注入了新的動(dòng)力。</p><p> 當(dāng)人們?cè)趥鹘y(tǒng)的辦公形式中,通過紙質(zhì)、電腦等途徑辦公的時(shí)候。辦公效率的問題,一直困擾著
19、人們。就在這時(shí)候,在線辦公已經(jīng)悄悄的走到身邊。移動(dòng)在線辦公輕松的解決了傳統(tǒng)模式的辦公難題,員工不管在哪都能夠享受到實(shí)時(shí)辦公。信息實(shí)時(shí)的優(yōu)勢(shì)、以及更多的選擇和便利性,是目前的移動(dòng)在線辦公正顛覆傳統(tǒng)辦公方式的三大有利因素。十年前你想聽實(shí)時(shí)辦公可能是白日夢(mèng),那互聯(lián)網(wǎng)發(fā)展的今天,這些都成為了可能。很多歐美國家已普遍接受在線辦公的模式,這種依托在線辦公系統(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ì)越來越明顯,接近與臺(tái)式機(jī)的性能同時(shí)又兼具移動(dòng)便攜性,人們開始依賴這些設(shè)備生活。2007年美國蘋果公司的iPhone發(fā)布后,給移動(dòng)教育解決了這一大難題。紛紛有美國、新加坡、法國、英國等多個(gè)國家開始將iPhone引用進(jìn)辦公系統(tǒng)中,并引起了員工強(qiáng)大的興趣。通過這種辦公方式節(jié)省了成本,提高了效率,減少了紙質(zhì)文檔的印刷,為環(huán)保做了貢獻(xiàn),也讓人們對(duì)iPhon
21、e有了新的認(rèn)識(shí)。本課題的研究是在以C/S模式設(shè)計(jì)和開發(fā)基于iPhone的移動(dòng)辦公系統(tǒng),目的在于改造現(xiàn)有的辦公模式,同時(shí)在可移動(dòng)使用的iPhone設(shè)備上通過流媒體(在線視頻)技術(shù)來呈現(xiàn)生動(dòng)形象的辦公內(nèi)容,自由自主的辦公環(huán)境,提高員工的辦公效率,激發(fā)出員工對(duì)工作的熱情,其關(guān)鍵是iPhone客戶端應(yīng)用軟件開發(fā)。</p><p> 1.2移動(dòng)辦公國內(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)想柳傳志聲稱要用社交網(wǎng)絡(luò)做業(yè)務(wù),萬科王石和京東劉強(qiáng)東在美國用iPad、手機(jī)遙控自家企業(yè),此時(shí),作為企業(yè)管理者,還站在移動(dòng)互聯(liá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、%。但是,在中國,老板們還有心病難除。最近的研究表明,員工喜歡移動(dòng)辦公,老板卻未必買賬。老板的心結(jié)是顯而易見的:一則懷疑員工到底有沒有在“上班”,二則唯恐企業(yè)有緊急工作時(shí)找不到人。這些心病恰恰反映了保守派企業(yè)的短處:管理思想墨守成規(guī),管理方法不具有包容性和應(yīng)變能力。數(shù)家高薪民營企業(yè)的實(shí)踐表明,對(duì)從事許多項(xiàng)目的員工實(shí)行移動(dòng)辦公,不僅可以降低辦公成本,還能大幅提升辦公效率,更沒有“找不到人”的時(shí)候。事實(shí)上,移動(dòng)辦公反而是考察員工責(zé)任心和效率
24、的試金石,就像Cisco 的調(diào)查顯示,其3/5 的員工說他們的工作效率與是否在辦公室無關(guān),超過38%的人認(rèn)</p><p> 2開發(fā)環(huán)境及相關(guān)技術(shù)</p><p> 2.1 iOS系統(tǒng)與Objective-C簡介</p><p> iOS是由蘋果公司開發(fā)的移動(dòng)操作系。蘋果公司在2007年公布了這個(gè)操作系統(tǒng),現(xiàn)在iPhone、iPhone、iPod touch等
25、設(shè)備上均使用改移動(dòng)操作系統(tǒng)。它屬于類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è)框架,為其他方法類的使用提供基礎(chǔ)功能,比如:硬件驅(qū)動(dòng)、內(nèi)存管理、線程管理、文件系統(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、用的方法類,如:SQLite數(shù)據(jù)庫、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)畫技術(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)用程序里面的各種組件都來自于此,此外還提供了多任務(wù)處理、多點(diǎn)觸控、圖片文字的輸出顯示、文件的存取以及加速計(jì)等功能。</p><p> iOS項(xiàng)目開發(fā)時(shí)所使用的語言是Objeelive-C和Cocoa編程。Objective-C是—種擴(kuò)充C的面向?qū)ο蟮木幊涕_發(fā)語言,極度簡化了C++語言,Cocoa是對(duì)Objeelive-
32、C的高級(jí)封裝,可以大量簡化開發(fā)者的工作量。Objective-C 語言有三個(gè)主要特點(diǎn),首先是有消息傳遞模型,其次是動(dòng)態(tài)能力,最后是內(nèi)存管理。</p><p> Objective-C通過支持類定義,方法以及屬性的語法,還有其他可以提高類的動(dòng)態(tài)擴(kuò)展能力的結(jié)構(gòu)等,擴(kuò)展提升了標(biāo)準(zhǔn)的 ANSIC語言?,F(xiàn)在Objective-C 主要應(yīng)用于Mac OS X和i0S這兩個(gè)NeXTSTEP的派生系統(tǒng),為了在iPhone上面開
33、發(fā) C/S 模式的應(yīng)用,就必須使用Objective-C語言編寫iOS應(yīng)用。</p><p><b> 2.2開發(fā)環(huán)境</b></p><p> 2.2.1 Xcode IDE</p><p> 目前iOS應(yīng)用開發(fā)唯一的開發(fā)工具就是Xcode,Xcode6.1是目前最新版本,它是蘋果公司向開發(fā)人員提供的集成開發(fā)環(huán)境,必須運(yùn)行在Mac OS
34、系統(tǒng)下。它可用于管理工程、編寫代碼、構(gòu)建可執(zhí)行文件、進(jìn)行源碼級(jí)調(diào)試、進(jìn)行源代碼倉庫管理、進(jìn)行性能調(diào)節(jié)、應(yīng)用發(fā)布工具等一系列開發(fā)工具,可以滿足應(yīng)用開發(fā)中的各種需要。Xcode支持了多種語言編寫的程序,包括C、C++、Java、Objective-C等,而且每種語言的編譯速度都很快。Xcode IDE是Xcode集成開發(fā)環(huán)境主要的組成部分,開發(fā)過程中的大部分工作都是使用Xcode IDE來完成。圖2.2是Xcode6.1的主界面。最新的Xc
35、ode IDE將功能融為一體,主要的功能有編譯器、Fix-it、Interface Builder、源代碼編輯器。</p><p> a)編譯器。Xcode IDE集成了強(qiáng)大的Objective-C、C、Java、C++開源LLVM編譯器,使得可以生成iPhone、iPhone、iPod Touch等產(chǎn)品調(diào)試用的app。.</p><p> b)Fix-it。在開發(fā)的過程中難免會(huì)因?yàn)槭?/p>
36、忽造成一些語法錯(cuò)誤,這時(shí)Fix-it就有了它的用武之地,它能夠立即提醒開發(fā)者所犯的代碼錯(cuò)誤,這對(duì)開發(fā)的效率有非常大的提高。</p><p> c)Interface Builder。在開發(fā)過程中,開發(fā)者需要構(gòu)建很多所需的UI界面,Interface Builder能夠很快速的生成UI界面,并且能夠?qū)崿F(xiàn)代碼與界面的功能鏈接。</p><p> 圖2.2 Xcode6.1主界面</
37、p><p> d)源代碼編輯器。在編寫iPhone應(yīng)用過程中,為了使每個(gè)方法每個(gè)變量一目了然,開發(fā)者不得不使用較長的名字來分辨它們。源代碼編輯器具有智能的代碼補(bǔ)全功能,它還有代碼折疊、語法高亮、消息起泡等很多實(shí)用功能。</p><p> 2.2.2 iPhone模擬器</p><p> iPhone模擬器即iOS Simulator,在開發(fā)過程中我們需要查看代碼在
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ī)、打電話、3G網(wǎng)絡(luò)等功能,所以有一臺(tái)真機(jī)進(jìn)行測(cè)試也是必不可少的。</p><p> 2.2.3 Ins
39、truments</p><p> 為了讓應(yīng)用盡可能完善,在開發(fā)的同時(shí)需要保證應(yīng)用是否存在閃退等一系列內(nèi)存泄漏問題,也要保證用戶體驗(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> 由蘋果公司官方在線商店(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在線辦公上的優(yōu)勢(shì)</p><p> iPhone的優(yōu)勢(shì)之一就是便攜,在地鐵、在公交、在路上,隨時(shí)隨地非常方便。iPhone的尺寸相對(duì)于電腦來說很小,也很輕,但是iPhone的內(nèi)容遠(yuǎn)遠(yuǎn)大于一個(gè)圖書館,對(duì)于工作者而言能夠大大的減輕負(fù)擔(dān)。iPhone兼具經(jīng)濟(jì)性與環(huán)保性,如果公司將iPhone應(yīng)用于辦公中,將傳統(tǒng)的紙質(zhì)辦公、電腦辦公裝進(jìn)iPhone,不
42、僅減輕了員工的公文包,降低了紙質(zhì)材料印刷費(fèi),無疑在經(jīng)濟(jì)和環(huán)保問題上都做的貢獻(xiàn)。在室外我們更是可以通過實(shí)時(shí)查看數(shù)據(jù)的方式,了解需要自己實(shí)時(shí)處理的問題,也方便辦公者查看和辦公。APP store擁有許多不同的iPhone應(yīng)用,各種辦公方式,激發(fā)人們對(duì)辦公的熱情。目前APP store里iPhone辦公類應(yīng)用很多。iPhone改變了人們的信息錄入習(xí)慣,讓人們可以用手指與顯示屏觸摸和滑動(dòng)輸入,讓使用者更加直觀明了,縮短了使用者與機(jī)器的距離。iP
43、hone改變了人們對(duì)技術(shù)的觀念,為新一代電子設(shè)備打下基礎(chǔ),如今時(shí)尚科技已經(jīng)滲入我們的生活。</p><p> 2.3.3 iPhone的不足</p><p> 優(yōu)點(diǎn)和缺點(diǎn)總是相互存在著,iPhone也不例外。價(jià)格是iPhone的硬傷,雖然中國GDP在不斷的增長,但是對(duì)于多數(shù)家庭來說花四五千去買一臺(tái)電子設(shè)備還是會(huì)顯得昂貴。iPhone開發(fā)之初就是面向個(gè)人的通信設(shè)備,至今主要還是娛樂和社交
44、功能,因此在思想不夠成熟的時(shí)候很容易分散辦公者注意力。iPhone等電子設(shè)備很多畫面都采用明亮的色彩,視覺刺激過于強(qiáng)烈,長時(shí)間的觀看會(huì)引影響人體健康。iPhone不支持移動(dòng)存儲(chǔ)設(shè)備,在離開WIFI的環(huán)境中想要分享數(shù)據(jù)顯得很不方便。iPhone是現(xiàn)階段移動(dòng)辦公輔助工具在業(yè)界的最高水準(zhǔn),如今市場(chǎng)上也出現(xiàn)了很多手機(jī),如基于Android系統(tǒng)的小米、華為、三星等,基于WP系統(tǒng)的諾基亞、HTC、三星等。雖然有部分設(shè)備硬件性能、便攜性上超越了同期的
45、iPhone,但是是應(yīng)用的數(shù)量與質(zhì)量、用戶體驗(yàn)、續(xù)航能力、性價(jià)比等還是不能和iPhone比擬的。因此只要合理使用,在條件允許的情況下iPhone是移動(dòng)辦公的不二良選。</p><p><b> 2.4 技術(shù)簡介</b></p><p> 2.4.1 MVC模式</p><p> MVC全名是Model View Controller,是模
46、型(model)-視圖(view)-控制器(controller)的縮寫,也是構(gòu)成這種框架的三個(gè)部分如圖2.3所示。MVC是一種軟件設(shè)計(jì)的典范思想,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,降低耦合,可以說任何一個(gè)完整的應(yīng)用都是由MVC構(gòu)成的。</p><p> a)Model(模型)是應(yīng)用程序中用于處理應(yīng)用程序數(shù)據(jù)邏輯的部分,通常模型對(duì)象負(fù)責(zé)在數(shù)據(jù)庫中存取數(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)用程序中處理用戶交互的部分。通??刂破髫?fù)責(zé)從視圖讀取數(shù)據(jù)
48、,控制用戶輸入,并向模型發(fā)送數(shù)據(jù)。在iOS程序開發(fā)過程中視圖和控制器之間的通信是固定的,主要通過outlet和action來實(shí)現(xiàn)。</p><p> 在MVC架構(gòu)下,視圖和模型是兩個(gè)完全獨(dú)立的成分,以控制器為中介進(jìn)行交互者,兩者沒有直接的聯(lián)系。開發(fā)者編寫的對(duì)象可以很容易劃分到其中的某個(gè)部分,也就是低耦合,這種模式適用與大多數(shù)語言編程,不僅僅是Objective-C。</p><p>
49、2.4.2 iOS內(nèi)存管理</p><p> 程序運(yùn)行時(shí),開辟的內(nèi)存空間。使用它,釋放它的過程,寫的好的程序盡可能少使用內(nèi)存。Objective-C的內(nèi)存管理機(jī)制與.Net/Java那種全自動(dòng)的垃圾回收機(jī)制是不同的,它本質(zhì)上還是C語言中的手動(dòng)管理方式,只不過稍微加了一些自動(dòng)方法。內(nèi)存管理模式基于對(duì)象的“所有權(quán)”上。任何對(duì)象都會(huì)被有一個(gè)或多個(gè)使用者引用,只要對(duì)象還有一個(gè)使用者,該對(duì)象就應(yīng)該繼續(xù)存在。如果一個(gè)對(duì)象沒
50、有使用者了,系統(tǒng)將自動(dòng)銷毀它。為了讓開發(fā)者清晰的了解:使用對(duì)象和不再使用對(duì)象的場(chǎng)景,Cocoa設(shè)置了以下策略:</p><p> (1)管好自己創(chuàng)建的對(duì)象。開發(fā)者使用alloc、new、copy和mutableCopy來創(chuàng)建對(duì)象。</p><p> (2)使用retain來獲得對(duì)象的所有權(quán)。某個(gè)函數(shù)接受的對(duì)象,通常保證在該函數(shù)調(diào)用期間仍然可用,并可以安全返回對(duì)象給上層調(diào)用者。開發(fā)者在以
51、下兩種情況下使用retain</p><p> a在“訪問函數(shù)”(accessor)的實(shí)現(xiàn)中或者在init方法,為了將對(duì)象作為自己的屬性。</p><p> b防止對(duì)象被其他操作釋放掉,從而變?yōu)闊o效的對(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è)類只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例,這個(gè)類稱為單例類。單例模式的要點(diǎn)有三個(gè);一是某個(gè)類只能有一個(gè)實(shí)例;二是它必須自行創(chuàng)建這個(gè)實(shí)例;三是它必須自行向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。單例模式的優(yōu)點(diǎn)有:實(shí)例控制:Singleton 會(huì)阻止其他對(duì)象實(shí)例化其自己的 Singleton 對(duì)象的副本,從而確保所有對(duì)象都訪
53、問唯一實(shí)例。靈活性:因?yàn)轭惪刂屏藢?shí)例化過程,所以類可以更加靈活修改實(shí)例化過程。在objective-c中要實(shí)現(xiàn)一個(gè)單例類,至少需要做以下四個(gè)步驟:</p><p> a)為單例對(duì)象實(shí)現(xiàn)一個(gè)靜態(tài)實(shí)例,并初始化,然后設(shè)置成nil。 b)實(shí)現(xiàn)一個(gè)實(shí)例構(gòu)造方法檢查上面聲明的靜態(tài)實(shí)例是否為nil,如果是則新建并返回一個(gè)本類的實(shí)例?! )重寫allocWithZone方法,用來保證其他人直接使用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ì)就是指針的傳遞。傳遞指針的問題在于,對(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,是專門供程序中不同類間的消息通信而設(shè)置的。每個(gè)運(yùn)行中的application都有一個(gè)NSNotificationCenter的成員變量,它的功能就類似公共欄。對(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í)體開頭是“^”,接著是由小括號(hào)所包起來的參數(shù)列(比如 int a,int b,int c),行為主體由大括號(hào)包起來,專有名字叫做block literal。行為主體可以用return回傳值,類型會(huì)被compiler自動(dòng)辨別。如果沒有參數(shù)列要寫成: ^(void)。</p><p> 3 軟件體系架構(gòu)與設(shè)計(jì)</p><p> 3.1軟件整體
59、架構(gòu)設(shè)計(jì)</p><p> 派卡系統(tǒng)平臺(tái)iPhone客戶端的構(gòu)建完全遵循MVC的設(shè)計(jì)模式,同時(shí)構(gòu)建基于iOS系統(tǒng)的軟件所使用的SDK都是遵循MVC設(shè)計(jì)模式的。根據(jù)公司需求,軟件首先需要實(shí)現(xiàn)與服務(wù)器之間的數(shù)據(jù)通信,然后軟件框架分為派卡首頁、派卡記錄統(tǒng)計(jì)、信息查詢錄入、套餐實(shí)時(shí)報(bào)價(jià)等模塊,具體框架如圖3.1。</p><p> 圖3.1 客戶端功能模塊圖</p><p
60、> 框架采用基于C/S模式的三層架構(gòu),分別是:用戶界面層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久層。界面層主要由iPhone客戶端完成,業(yè)務(wù)邏輯層在web服務(wù)器上,數(shù)據(jù)層主要是寫本地?cái)?shù)據(jù)庫和緩存。</p><p> 3.2功能性需求分析與設(shè)計(jì)</p><p> 3.2.1網(wǎng)絡(luò)通信模塊</p><p> 網(wǎng)絡(luò)通信是本應(yīng)用軟件的基本支撐,通過訪問網(wǎng)絡(luò)得知服務(wù)器數(shù)據(jù)的變化,從
61、而呈現(xiàn)不同的課程也界面功能。當(dāng)網(wǎng)絡(luò)通信故障、或者網(wǎng)絡(luò)切換時(shí),需要有相應(yīng)的提示信息告知用戶。</p><p><b> 3.2.2登錄模塊</b></p><p> 用戶登錄功能是本應(yīng)用軟件的一項(xiàng)基本功能,用戶必須在登錄狀態(tài)下進(jìn)行查詢、錄入等功能。在一定得時(shí)間內(nèi),應(yīng)用軟件會(huì)保存用戶的登錄狀態(tài),勉強(qiáng)了用戶反復(fù)登錄的麻煩。用戶必須輸入公司發(fā)放的用戶名和密碼組合,使用虛擬
62、鍵盤登錄。會(huì)在本地判斷輸入信息是否合法,然后發(fā)送給服務(wù)器比較。服務(wù)器返回“登錄成功”時(shí)登入系統(tǒng),否則提示錯(cuò)誤,需要重新登錄。</p><p> 用戶注冊(cè)模塊是為了用戶使用本應(yīng)用軟件的特殊功能的通道,用戶登陸時(shí),同一個(gè)賬號(hào)只能激活一臺(tái)iPhone手機(jī),若再激活另外設(shè)備,則需要進(jìn)行系統(tǒng)備案,需要后天進(jìn)行審批。應(yīng)用軟件登錄模塊的實(shí)際圖如圖3.2所示。</p><p> 圖3.2 用戶登錄子模
63、塊實(shí)際圖</p><p><b> 3.2.3首頁模塊</b></p><p> 系統(tǒng)首頁界面是用戶登陸之后看見的第一個(gè)界面,派卡首頁是需要登錄才能查看的界面,通過相應(yīng)的操作可以跳轉(zhuǎn)到相應(yīng)的功能模塊。課程首頁分為車牌錄入、套餐查詢和記錄統(tǒng)計(jì)。其中套餐查詢是由服務(wù)器返回套餐分類以及詳情查看的模塊,記錄統(tǒng)計(jì)將由服務(wù)器返回之前的派卡記錄,接下來的就是本系統(tǒng)的車牌錄入模塊
64、,車牌錄入是通過車牌信息進(jìn)行相關(guān)操作的模塊。派卡首頁模塊的實(shí)際圖如圖3.3所示。</p><p> 圖3.3 派卡首頁模塊實(shí)際圖</p><p> 3.2.4車牌錄入模塊</p><p> 車牌錄入模塊是本應(yīng)用軟件重點(diǎn)功能,車牌錄入模塊是通過輸入相應(yīng)車牌,查找相應(yīng)車牌信息,對(duì)之前有過記錄的車牌信息進(jìn)行顯示,已經(jīng)聯(lián)系人的添加以及修改,通過添加派卡記錄,可對(duì)相應(yīng)車
65、牌的客戶進(jìn)行禮品贈(zèng)券的派發(fā)以及記錄。其中車牌的輸入可以通過手動(dòng)輸入或者通過拍照識(shí)別車牌進(jìn)行操作,拍照識(shí)別是通過手機(jī)拍照,然后截取圖片,將圖片傳入底層C++模塊,讓底層C++識(shí)別車牌,然后返回識(shí)別出來的車牌。車牌錄入模塊的實(shí)際圖如圖3.4所示。</p><p> 圖3.4 車牌錄入模塊實(shí)際圖</p><p> 3.2.5派卡記錄查詢模塊</p><p> 派卡記
66、錄查詢模塊是客戶端通過post請(qǐng)求,與服務(wù)器后天進(jìn)行數(shù)據(jù)交互,獲得之前該登陸賬號(hào)的派發(fā)記錄,然后通過界面的形式,將數(shù)據(jù)顯示出來。能給讓用戶對(duì)自己之前的派發(fā)記錄有一個(gè)了解。派卡記錄查詢模塊的實(shí)際圖如圖3.5所示。</p><p> 圖3.5 派卡記錄查詢模塊實(shí)際圖</p><p> 3.2.6套餐報(bào)價(jià)查詢模塊</p><p> 套餐報(bào)價(jià)查詢模塊是本應(yīng)用軟件的對(duì)現(xiàn)
67、有套餐顯示的界面,在用戶在進(jìn)行派卡之余可以通過套餐資訊了解相應(yīng)的套餐信息,增加用戶的知識(shí)面。從了提高用戶對(duì)套餐的了解,更好的服務(wù)客戶。給用戶帶來一個(gè)較好的使用體驗(yàn),會(huì)有眼前一新的感覺。套餐報(bào)價(jià)查詢模塊的實(shí)際圖如圖3.6所示。</p><p> 圖3.6套餐報(bào)價(jià)查詢模塊實(shí)際圖</p><p><b> 3.2.7設(shè)置模塊</b></p><p&g
68、t; 設(shè)置模塊包含版本更新,默認(rèn)車牌前綴設(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)畫實(shí)現(xiàn)</p><p> 啟動(dòng)界面在iOS Apps中比較常見,也包括一些
69、桌面應(yīng)用程序,就是啟動(dòng)應(yīng)用軟件的時(shí)候看到的第一個(gè)界面。iPhone啟動(dòng)界面分為兩種方式,一種是使用系統(tǒng)自帶的,按規(guī)則定義啟動(dòng)圖片名稱即可,顯示為1秒,要想延長時(shí)間,用[nsthread ? sleepForTimeInterval:5.0] ,另一種就是自定義uiivew,加到window中去。由于本應(yīng)用軟件想給用戶一個(gè)不一樣的體驗(yàn),同時(shí)也向用戶加入了一個(gè)微廣告的目的。所以在不影響應(yīng)用軟件正常啟動(dòng)效果的情況下,采用了兩種方式相結(jié)合。即在
70、應(yīng)用軟件按方式一添加啟動(dòng)畫面的同時(shí),在AppDelegate.m對(duì)象內(nèi)的application didFinishLaunchingWithOptions方法里面加入了一個(gè)UIView動(dòng)畫,再使用NSTimer讓動(dòng)畫結(jié)束后隱藏啟動(dòng)畫面。這樣即有了良好的用戶體驗(yàn),又加入了不會(huì)讓用戶反感的微廣告。這種做法已經(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ù)器與客戶端之間的數(shù)據(jù)通信功能,iOS系統(tǒng)的網(wǎng)絡(luò)通信對(duì)象是NSURLConnection,NSURLConnection提供對(duì)網(wǎng)絡(luò)異步加載請(qǐng)求的支持,并且將獲取的數(shù)據(jù)返回給代理方法connection didReceiveData。提供了簡單的接口去創(chuàng)建和取消連接,同時(shí)使用delegate方
72、法去支持連接過程的反饋和控制 。在實(shí)際開發(fā)中直接用的不多,所以對(duì)NSURLConnection進(jìn)行了封裝,實(shí)現(xiàn)了DownLoad類和DownLoadFinish類。在原有單條數(shù)據(jù)通信外,實(shí)現(xiàn)了多線程下載,也就是同時(shí)多條數(shù)據(jù)下載。DownLoadFinish為單例類,整個(gè)應(yīng)用軟件中使用的DownLoadFinish都是同一個(gè)對(duì)象,方便了對(duì)服務(wù)器通信的管理。日常生活中,用戶可能在不同的網(wǎng)絡(luò)環(huán)境下使用應(yīng)用軟件,因此使用了Reachabilit
73、y和netReachability來檢測(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)行檢查,在AppDelegate.m中完成此工作。在應(yīng)用軟件運(yùn)行的過程中,應(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部署,客戶端與服務(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ú)立于語言和平臺(tái),具有自我描述性。從iOS5開始,APPLE提供了對(duì)JSON的原生支持(NSJSONSerialization),但是為了兼容以前的iOS版本,可以使用第三方庫來解析JSON。JSON解析常見的iOS解析方法有TouchJson、 SBJson 、JSONKit 和 iOS5所支持的原生的JSON方法等,其中系統(tǒng)的API的解析速度最快,我們?cè)诠こ添?xiàng)
78、目中選擇使用。</p><p><b> 4.3登錄模塊</b></p><p> 4.3.1用戶登錄子模塊實(shí)現(xiàn)</p><p> 本應(yīng)用軟件用戶登錄子模塊主要實(shí)現(xiàn)用戶賬號(hào)密碼信息的輸入、驗(yàn)證,最終完成登錄。由于用戶賬號(hào)密碼的保密性,登錄數(shù)據(jù)請(qǐng)求參數(shù)做了加密處理,可以有效的保護(hù)用戶隱私。登錄請(qǐng)求參數(shù)見表4.2,用戶登錄核心方法見表4.3。
79、</p><p> 表4.2 登錄請(qǐng)求參數(shù)表</p><p> 表4.3 登錄核心方法表</p><p> 用戶登錄子模塊使用了UITextField、UIImageView、UIButton、UIAlertView等控件進(jìn)行視圖的布局,應(yīng)用軟件登錄子模塊的實(shí)際圖如圖4.1所示。</p><p> 圖4.1 用戶登錄子模塊實(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),首先,簡單介紹一下UDID這個(gè)東西:UDID是Unique Device Identifier的簡稱,也就是唯一設(shè)備標(biāo)識(shí)
81、的意思。于iOS SDK中取得的方法是UIDevice的一個(gè)叫uniqueIdentifier的NSString*,由于這個(gè)ID字符串是基于設(shè)備的,應(yīng)用開發(fā)人員可以通過獲取此ID來用于記錄區(qū)分設(shè)備。正是由于這個(gè)特性,可能會(huì)導(dǎo)致一些隱私等等相關(guā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)過一段時(shí)間的研究、試驗(yàn),發(fā)現(xiàn)了這個(gè)應(yīng)該還算是比較靠譜的方法……</p><p> 其實(shí)早在UDID被deprecated的消息剛出來時(shí),就已經(jīng)有很多人開始研究對(duì)策了,我也google到了各種五花八門的解決方案,最后還是覺得這個(gè)UUID的方案比較合適,畢竟是蘋果官方文檔里推薦的替換UDID的方
83、法.</p><p> 關(guān)于UUID的具體說明可以查看下面參考文章中給出的蘋果官方文檔鏈接。簡單來說,UUID就是一個(gè)隨機(jī)序列字符串生成器,有點(diǎn)像Microsoft Windows的COM GUID生成器的作用,比起自己隨機(jī)一個(gè)字符串的好處就是這東西能夠保證唯一性,適用于標(biāo)記。這樣的做法把生成的ID保存起來,下次再用的時(shí)候就直接讀取已經(jīng)保存的ID了。顯然,那個(gè)UUID生成只是個(gè)“隨機(jī)字符串”生成器,并不能像UD
84、ID那樣保證每次取得的串都一樣!保存起來雖然能保證用戶再次打開這個(gè)應(yīng)用時(shí),能夠獲得一致的標(biāo)識(shí)ID,但不能保證用戶刪除應(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ī)無需備案,如更換手機(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í)別是通過相機(jī)拍照,通過第三方庫對(duì)照片進(jìn)行處理,將圖片傳入底層核心C++,底層通過對(duì)圖片處理,對(duì)圖片中車牌的符號(hào)一個(gè)識(shí)別,然后將識(shí)別結(jié)果傳回,得到照片車牌的車牌號(hào)碼。拍照識(shí)別功能的實(shí)際圖如圖4.2所示。<
93、;/p><p> 圖4.2 拍照識(shí)別功能實(shí)際圖</p><p><b> 4.6定位功能實(shí)現(xiàn)</b></p><p> 定位功能通過蘋果自帶的定位功能,由于蘋果在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> // 開始更新位置</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è)更新是通過獲取當(dāng)前使用APP的版本以及服務(wù)器中APP的最新版本,通過兩者的比較,如果服務(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ì)不一樣,但是開發(fā)人員最關(guān)心的是屏幕寬高比。目前所有iPhone的型號(hào)相對(duì)Android來說很少,所有開發(fā)人員不用花太多力氣去適配屏幕。在測(cè)試的過程中也減少了跨終端測(cè)試,所以測(cè)試數(shù)據(jù)要穩(wěn)定很多。但是由于網(wǎng)絡(luò)環(huán)境的千差萬別加上時(shí)間與條件的限制,本應(yīng)用軟件沒有進(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è)試、用戶體驗(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一次解決了問題。</p><p> 在應(yīng)用軟件重復(fù)測(cè)試的時(shí)候發(fā)現(xiàn)了閃退的問題,后
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(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ì)與開發(fā)說明書
- 基于ios的點(diǎn)餐系統(tǒng)說明書
- 基于ios的圖片標(biāo)注系統(tǒng)說明書
- 基于ios的學(xué)籍信息管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)說明書
- 基于ios的歷史人物查詢應(yīng)用說明書
- 基于ios的騰訊qq說明書
- 基于ios系統(tǒng)的流媒體學(xué)習(xí)資源研究與開發(fā)說明書
- 基于ios的新浪微博設(shè)計(jì)說明書
- 基于ios的畢業(yè)跟蹤管理系統(tǒng)教師端說明書
- 基于ios的汽車租賃平臺(tái)說明書
- 基于ios的超級(jí)猜圖說明書
- 基于ios的天氣預(yù)報(bào)查詢系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)說明書畢業(yè)論文
- 基于ios的駕考寶典開發(fā)說明書
- 基于ios系統(tǒng)的教務(wù)應(yīng)用設(shè)計(jì)
- 基于ios的網(wǎng)絡(luò)音樂播放器設(shè)計(jì)說明書
- 基于ios平臺(tái)的移動(dòng)應(yīng)用開發(fā)--消防安全指南說明書
- 基于ios平臺(tái)的移動(dòng)應(yīng)用開發(fā)--消防安全指南說明書
- 德派森系統(tǒng)說明書(設(shè)備)
評(píng)論
0/150
提交評(píng)論