亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Swift對Objective—C開發(fā)的移動應(yīng)用程序優(yōu)化

        2018-01-19 11:35:34李亞欣蔡永香鄧舒穎
        軟件導(dǎo)刊 2018年10期

        李亞欣 蔡永香 鄧舒穎

        摘 要:針對動態(tài)頁面代碼編寫冗長、前臺數(shù)據(jù)庫更新方式待優(yōu)化等問題,基于Swift與Objective-C混編技術(shù)對早期Objective-C移動應(yīng)用程序進(jìn)行優(yōu)化,既充分利用由Objective-C語言封裝好的第三方工具,又利用Swift的語言特點(diǎn),如屬性觀察器優(yōu)化動態(tài)頁面簡化程序邏輯、提高軟件各項性能等;對前臺數(shù)據(jù)庫設(shè)計進(jìn)行優(yōu)化,實(shí)現(xiàn)用戶數(shù)據(jù)分開存儲、數(shù)據(jù)庫按需更新等功能。對優(yōu)化后的程序進(jìn)行測試,結(jié)果表明,應(yīng)用功能得到完善,系統(tǒng)性能得到提高。

        關(guān)鍵詞:iOS;程序優(yōu)化;Swift;Objective-C

        DOIDOI:10.11907/rjdk.181106

        中圖分類號:TP392

        文獻(xiàn)標(biāo)識碼:A 文章編號:1672-7800(2018)010-0178-05

        英文摘要Abstract:Some problems exist in the early mobile Apps based on Objective-C including tediously long code on dynamic pages,unreasonable updating methods for foreground database,etc.Therefore,this paper optimizes the early code programming by taking advantages of both Swift and Objective-C programming technology.This method can make the utmost of the excellent third-party tools encapsulated by Objective-C code as well as use Swift′s features of which is like using the Property Observer to simplify procedures and improving the performance of software and so on.In addition,it optimizes the foreground database design and achieves the functions of storing the user data separately,updating the database as needed,etc.And the experimental result indicates that the function of application is improved and the performance of system is enhanced after using this method.

        英文關(guān)鍵詞Key Words:iOS; program optimization; Swift; Objective-C

        0 引言

        隨著移動互聯(lián)網(wǎng)技術(shù)的發(fā)展,應(yīng)用軟件逐漸由PC端轉(zhuǎn)向移動端[1],移動端應(yīng)用尤其是iOS應(yīng)用繁多。目前,相關(guān)研究多以設(shè)計為主,如趙杏杏[2]關(guān)于移動水利信息APP的設(shè)計與實(shí)現(xiàn)、王大鵬[3]基于iOS的外賣APP設(shè)計與實(shí)現(xiàn)、劉磊[4]基于iOS的校園OA管理系統(tǒng)設(shè)計、尚燕濤[5]基于iOS的移動診所系統(tǒng)等,而對于應(yīng)用過程中可能遇到的問題、相應(yīng)解決方法及優(yōu)化方案的研究相對較少。崔璨[6]基于iOS系統(tǒng)的MOOC學(xué)習(xí)APP優(yōu)化策略研究,也只針對APP功能方面的優(yōu)化,未考慮軟件性能優(yōu)化。曾晨曦[7]考慮了性能優(yōu)化卻缺乏具體事例分析。為此,本文結(jié)合具體事例研究了應(yīng)用可能存在的問題及解決方法,不僅優(yōu)化軟件功能,而且對性能也加以考慮。

        “油訊通”是一款面向油氣行業(yè)的輔助辦公類APP,提供油氣行業(yè)資訊的便捷獲取、通知公告的實(shí)時發(fā)送與接收、群組內(nèi)部、員工之間的實(shí)時互動交流等功能[8],相繼推出了Android及iOS版本,用戶可分別在安卓市場及蘋果AppStore上下載使用。早期的iOS版用Objective-C(之后簡稱ObjC)語言編寫,ObjC由 C語言衍生,繼承了C語言特性,是擴(kuò)充C的面向?qū)ο缶幊陶Z言。ObjC語言運(yùn)行速度快,動態(tài)運(yùn)行環(huán)境適合UI編程[9],并且累積了豐富的第三方工具,但其語法形式與主流語言差異大,對編寫人員要求較高,語言安全性也略顯不足?!坝陀嵧ā盇PP在測試運(yùn)行一段時間后發(fā)現(xiàn)存在如下問題:①代碼冗長,不利于后期管理維護(hù);②運(yùn)行速度和內(nèi)存占用有待改善;③用戶部分個人信息在同一部手機(jī)上不能按用戶區(qū)分顯示,如新聞信息是否被當(dāng)前用戶查看、用戶的收藏信息等;④版本更新中涉及到前臺數(shù)據(jù)庫結(jié)構(gòu)發(fā)生變化的版本,不能一鍵更新。

        Swift是Apple公司在2014發(fā)布的一門開源編程語言,用來撰寫Mac OS X和iOS應(yīng)用程序[10]。Swift相較于ObjC語言具有更加安全、高效、便捷的特點(diǎn),使用Swift語言能很好地提高軟件性能、降低開發(fā)難度、優(yōu)化多項應(yīng)用功能,因此本文采用Swift語言進(jìn)行優(yōu)化處理。

        1 Swift優(yōu)化思路

        優(yōu)化過程不是將原有應(yīng)用重建,而是在充分利用原有應(yīng)用優(yōu)點(diǎn)的同時,彌補(bǔ)其不足,增強(qiáng)其性能。與ObjC相較,Swift語言具有更加安全、高效、便捷的特點(diǎn),繼承了ObjC語言優(yōu)點(diǎn)、規(guī)避其缺點(diǎn)并可與ObjC混合編寫。

        1.1 簡化代碼、優(yōu)化速度與內(nèi)存

        Swift簡化了ObjC晦澀的語法,如取消頭文件改為點(diǎn)語法,不需要在行末添加“;”進(jìn)行標(biāo)記等。對基本語句如switch語句功能進(jìn)行擴(kuò)展,加入惰屬性、計算屬性、屬性觀察器等新元素,極大地拓展了編程思路,簡化了程序固有邏輯。Swift綜合了編譯型語言和解釋型語言優(yōu)點(diǎn),編譯速度更快[11]。Swift提供的Playground功能可在撰寫代碼的同時實(shí)時顯示運(yùn)行結(jié)果,真正實(shí)現(xiàn) “所見即所得”,提高了調(diào)試效率[12]。考慮到使用一些優(yōu)秀且成熟的第三方工具如FMDB、AFNetworking等,有利于提高編程效率,而這些工具大多由ObjC語言編寫、封裝。因此,基于Swift與ObjC混編技術(shù)對“油訊通”APP進(jìn)行優(yōu)化,既能充分利用ObjC語言封裝好的優(yōu)秀第三方工具,又能利用Swift優(yōu)秀的語言特點(diǎn),減少開發(fā)時間,降低開發(fā)難度。

        1.2 采用面向用戶的多數(shù)據(jù)庫存儲模式

        傳統(tǒng)應(yīng)用中前臺僅存在一個SQLite數(shù)據(jù)庫存儲應(yīng)用數(shù)據(jù)。當(dāng)用戶需要存儲并顯示個性化數(shù)據(jù)如操作印記時,僅通過在該數(shù)據(jù)庫中創(chuàng)建多個用戶數(shù)據(jù)表滿足需求,無疑增加了開發(fā)人員甄別數(shù)據(jù)的難度,這種情況下依據(jù)用戶創(chuàng)建與之對應(yīng)的數(shù)據(jù)庫是一個有效的解決方案。使用多數(shù)據(jù)庫存儲模式,將數(shù)據(jù)庫名依據(jù)用戶信息加以區(qū)分,庫內(nèi)數(shù)據(jù)表命名規(guī)則相同,程序中同一套邏輯操作可應(yīng)用于不同用戶的數(shù)據(jù)庫。此外,為減少多數(shù)據(jù)庫增加內(nèi)存占用問題,為應(yīng)用添加對非主要用戶數(shù)據(jù)庫的清理功能,以便對這些用戶進(jìn)行數(shù)據(jù)清理。

        1.3 前臺數(shù)據(jù)庫版本按需更新

        前臺數(shù)據(jù)庫用于滿足基本數(shù)據(jù)存取,一般情況下數(shù)據(jù)結(jié)構(gòu)不會發(fā)生改變,但有時隨著應(yīng)用需求的改變或版本變更,新版本可能會涉及到其中部分?jǐn)?shù)據(jù)表結(jié)構(gòu)的修改,應(yīng)用更新時需要針對用戶本地數(shù)據(jù)庫狀態(tài)按需執(zhí)行更新操作。這需要開發(fā)人員一方面對前臺數(shù)據(jù)庫更新操作集中管理,另一方面按照一定的規(guī)范以及邏輯滿足不同狀態(tài)下應(yīng)用的更新。

        2 優(yōu)化方法與實(shí)施

        2.1 面向用戶的多數(shù)據(jù)庫存儲模式

        創(chuàng)建多個數(shù)據(jù)庫管理多個用戶的個人信息,如圖1所示。用戶登錄時,依據(jù)用戶信息查找是否存在用戶數(shù)據(jù)庫,根據(jù)查找結(jié)果選擇連接已有數(shù)據(jù)庫或創(chuàng)建新數(shù)據(jù)庫,之后進(jìn)行正常數(shù)據(jù)庫操作,運(yùn)行軟件。

        對比“油訊通”實(shí)現(xiàn)前后數(shù)據(jù)庫狀態(tài)。如圖2(a)所示,原應(yīng)用在安裝后創(chuàng)建一個與應(yīng)用相關(guān)聯(lián)的數(shù)據(jù)庫并以軟件信息(軟件名)命名該數(shù)據(jù)庫;如圖2(b)所示,根據(jù)不同用戶創(chuàng)建多個與應(yīng)用相關(guān)聯(lián)的數(shù)據(jù)庫,并結(jié)合軟件信息與用戶唯一信息(軟件名_用戶賬戶名)命名個人數(shù)據(jù)庫。原用戶登錄時尋找并連接對應(yīng)的數(shù)據(jù)庫,新用戶登錄時以上述命名規(guī)則創(chuàng)建數(shù)據(jù)庫,實(shí)現(xiàn)垃圾清理功能時也可以該命名規(guī)則尋找非主用戶數(shù)據(jù)庫進(jìn)行清理操作。

        2.2 前臺數(shù)據(jù)庫版本按需更新

        2.2.1 本地數(shù)據(jù)庫狀態(tài)判斷

        不同用戶手機(jī)上安裝應(yīng)用的版本不同,對應(yīng)前臺數(shù)據(jù)庫的狀態(tài)也存在差異,為使數(shù)據(jù)庫更新時按需執(zhí)行修改操作,需要對用戶本地數(shù)據(jù)庫狀態(tài)進(jìn)行判斷。為此,需要在本地數(shù)據(jù)庫中創(chuàng)建一個版本信息表用以存儲本地數(shù)據(jù)庫版本信息。數(shù)據(jù)庫更新時提取該信息,依據(jù)該信息進(jìn)行數(shù)據(jù)庫對應(yīng)的升級操作。升級完成后,更新表內(nèi)版本信息,以避免下次升級時重復(fù)執(zhí)行已完成的更新操作。

        2.2.2 更新操作集中管理與實(shí)施

        開發(fā)人員需要將升級操作集中管理以便應(yīng)用提取到用戶本地數(shù)據(jù)庫的狀態(tài)信息后,執(zhí)行相應(yīng)的升級操作。采用switch語句實(shí)現(xiàn)數(shù)據(jù)庫狀態(tài)的判斷以及更新操作的集中管理。數(shù)據(jù)庫版本信息使用遞增數(shù)字進(jìn)行記錄,每個case對應(yīng)一個版本下的升級操作,使用fallthrough實(shí)現(xiàn)case間“擊穿”功能:

        Switch dbVersion{

        case 1:

        //數(shù)據(jù)庫更新操作1

        //數(shù)據(jù)庫版本信息更新為2

        fallthrough

        case 2:

        //數(shù)據(jù)庫更新操作2

        //數(shù)據(jù)庫版本信息更新為3

        fallthrough

        default:break

        }

        數(shù)據(jù)庫更新時,提取本地數(shù)據(jù)庫版本信息,利用switch找到對應(yīng)的case,完成該case以及之后case中所有升級操作,同時修改對應(yīng)版本信息。版本信息始終指向下一版本,使每次更新不會重復(fù),直至升級至最新要求。此更新流程不適用于前期數(shù)據(jù)庫設(shè)計存在重大漏洞、后期需要反復(fù)多次修改前臺數(shù)據(jù)庫的應(yīng)用。更新操作見圖3。

        2.2.3 前臺數(shù)據(jù)庫整體運(yùn)行流程

        結(jié)合多數(shù)據(jù)庫存儲方式,前臺數(shù)據(jù)庫整體運(yùn)行流程如圖4所示。新建數(shù)據(jù)庫時,以最新的表結(jié)構(gòu)創(chuàng)建各數(shù)據(jù)表,并創(chuàng)建版本信息表存入當(dāng)前最新信息;已經(jīng)存在的數(shù)據(jù)庫在連接后,需要判斷是否需要更新。對數(shù)據(jù)庫內(nèi)無版本信息表的數(shù)據(jù)庫,創(chuàng)建版本信息表存入初始信息,以該信息完成所有數(shù)據(jù)庫更新操作。對于數(shù)據(jù)庫內(nèi)存在版本信息表的數(shù)據(jù)庫,提取表內(nèi)版本信息,以該信息執(zhí)行所需的更新操作。這樣,不管數(shù)據(jù)庫處于何種狀態(tài)均能使其達(dá)到最新需求。

        2.3 動態(tài)頁面優(yōu)化

        Swift具有許多便捷且適用的語法特點(diǎn),屬性觀察器是其中一個優(yōu)秀代表。屬性觀察器能監(jiān)控和響應(yīng)屬性值變化,每當(dāng)其屬性值被設(shè)置就會執(zhí)行相應(yīng)操作[13]。

        以聊天頁面為例,該頁面需要根據(jù)聊天形式(單人聊天或群組聊天)、信息形式(文字、圖片或表情)、信息長度、信息發(fā)送方(本人或他人)、發(fā)送時間等多種條件動態(tài)改變頁面布局。使用ObjC實(shí)現(xiàn)時,在判斷上述多項條件后需要調(diào)用不同的操作函數(shù)并傳遞多個參數(shù)控制頁面變化。而使用Swift優(yōu)化時,只需使用屬性觀察器將所需操作封裝,調(diào)用操作時對屬性觀察器簡單賦值即可。

        如圖5所示,Swift工程中聊天頁主要由UIViewController(ChatPage)控制器管理下的UITableView控件組成,每條信息作為一個UITableViewCell(ChatCell)進(jìn)行填充。其中ChatCell樣式如圖6所示,空白部分為UIView(ContentView)控件,用于填充聊天內(nèi)容。

        在ChatCell類中使用如表1所示的4個屬性觀察器封裝其動態(tài)變化,ChatPage類提供改變的條件以及控制UITableView的行高以適應(yīng)ChatCell大小。實(shí)驗(yàn)證明,ChatCell類用屬性觀察器改寫后,代碼量較ObjC版的代碼量減少近40%, ChatPage類代碼量減少近50%,同時靈活性及易用程度都得到了優(yōu)化。

        3 優(yōu)化效果分析

        以Swift語言為編輯語言優(yōu)化“油訊通”APP,在優(yōu)化版本中使用面向用戶型多數(shù)據(jù)庫構(gòu)建方式,在保證其它功能基本一致的前提下,進(jìn)行ObjC版本和Swift版本的多項指標(biāo)對比。

        3.1 文件代碼得到精簡

        ObjC中一個對象文件由后綴名為.m和.h兩個文件組成,而Swift簡化了頭文件.h文件的創(chuàng)建,只需創(chuàng)建后綴名為.swift的一個文件,所以工程內(nèi)文件數(shù)量顯著減少。ObjC工程文件夾下包含1 085個文件,而Swift工程文件夾下僅包含441個文件。ObjC版工程大小為67.1MB,Swift版工程大小為44.3MB,Swift版工程大小較原版工程大小減少近30%。

        3.2 安全隱患減少

        Swift是注重安全性的強(qiáng)類型語言,它將很多ObjC語言中視為警告甚至正常(如類型間的隱式轉(zhuǎn)換)的語法形式加以禁止,極大避免了其可能帶來的安全隱患,將“錯誤扼殺在萌芽之中”[14]。在原版工程中存在近100多條警告提示,而Swift版工程中僅有一條,而且是在橋接第三方工具中出現(xiàn)的警告,這說明新版本在一定程度上減少了安全隱患。

        3.3 內(nèi)存占用量減少

        運(yùn)行時所產(chǎn)生的內(nèi)存消耗可作為衡量應(yīng)用性能的指標(biāo)。一個運(yùn)行良好的應(yīng)用在完成固定操作時所占用的內(nèi)存消耗應(yīng)盡可能小,以保證應(yīng)用及手機(jī)整體的運(yùn)行流暢性[15-16]。本文以功能優(yōu)化中前臺數(shù)據(jù)庫相關(guān)操作以及聊天界面相關(guān)操作為例,對這一指標(biāo)進(jìn)行了測試,測試環(huán)境如下:測試機(jī)器:MAC筆記本,測試系統(tǒng):10.12.6,測試工具:Xcode8.2,測試平臺:iPhone7虛擬器。

        3.3.1 內(nèi)存占用量對比

        前臺數(shù)據(jù)庫相關(guān)操作主要集中在應(yīng)用安裝后首次啟動、用戶登錄以及更換用戶過程,因此分別運(yùn)行兩版本執(zhí)行上述操作,并記錄其運(yùn)行時內(nèi)存消耗。圖7、圖8分別為ObjC版和Swift版運(yùn)行上述操作時內(nèi)存消耗折線圖,統(tǒng)計各個操作完成后測試值趨于穩(wěn)定時(折線保存水平)的內(nèi)存消耗量,見表1。操作過程中Swift版內(nèi)存消耗均比ObjC版有所減少,最高可減少17.2%的運(yùn)行內(nèi)存占用。由此可知,結(jié)合Swift語言特性,搭建具備版本按需更新的面向用戶型數(shù)據(jù)庫,不僅增強(qiáng)了數(shù)據(jù)庫能力而且可減少應(yīng)用運(yùn)行內(nèi)存消耗,達(dá)到優(yōu)化效果。

        3.3.2 動態(tài)頁面內(nèi)存占用量對比

        分別加載相同數(shù)量、相同內(nèi)容的聊天信息,測試兩版本聊天界面在運(yùn)行時的內(nèi)存消耗,如圖9、圖10所示。為排除軟件登錄及頁面跳轉(zhuǎn)等操作所消耗不同內(nèi)存量的影響,可通過計算上述操作后的總內(nèi)存消耗量減去跳轉(zhuǎn)到聊天頁面前的內(nèi)存消耗量的內(nèi)存增量值進(jìn)行比較,得到ObjC版內(nèi)存消耗45.4MB(108MB-62.6MB),Swift版內(nèi)存消耗36MB(82.6MB-46.6MB),Swift版內(nèi)存消耗較ObjC版減少約20.7%,內(nèi)存消耗得以優(yōu)化。

        4 結(jié)語

        本文以Swift和Objective-C混編技術(shù)對早期的 “油訊通”APP進(jìn)行了優(yōu)化,采用面向用戶的多數(shù)據(jù)庫存儲模

        式,以及對數(shù)據(jù)庫進(jìn)行版本管理、按需更新等方法,解決了原版本中代碼冗長、內(nèi)存占用量大、用戶個人信息不能區(qū)分顯示、版本不能一鍵更新等問題。對優(yōu)化前后應(yīng)用程序進(jìn)行對比,結(jié)果表明,這種優(yōu)化方法使文件代碼得到了精簡,減少了系統(tǒng)安全隱患,程序運(yùn)行時內(nèi)存占用量減少,軟件性能得到了提高。

        參考文獻(xiàn):

        [1] 李亞格,蘭誠棟.基于iOS的移動辦公系統(tǒng)設(shè)計與性能優(yōu)化[J].計算機(jī)工程,2016,42(7):22-26.

        [2] 趙杏杏,張曉祥.移動水利信息APP模塊的設(shè)計與實(shí)現(xiàn)[J].測繪工程,2014,23(7):46-50.

        [3] 王大鵬.基于iOS的外賣APP設(shè)計與實(shí)現(xiàn)[D].南昌:南昌大學(xué),2016.

        [4] 劉磊,張賀,田家赫.基于IOS的校園OA管理系統(tǒng)設(shè)計[J].軟件導(dǎo)刊,2015(1):113-114.

        [5] 尚燕濤.基于IOS的移動診所系統(tǒng)[D].廣州:華南理工大學(xué),2016.

        [6] 崔璨,王朋嬌,段婷婷.基于iOS系統(tǒng)的MOOC學(xué)習(xí)APP優(yōu)化策略研究[J].軟件導(dǎo)刊,2017,16(9):10-13.

        [7] 曾晨曦,馬蓁蓁,崔雪然.移動應(yīng)用資源限制分析與iOS應(yīng)用優(yōu)化建議[J].現(xiàn)代電信科技,2016,46(4):10-18.

        [8] 蔡永香,陳帆,周明,等.基于Android的輔助辦公APP的設(shè)計與實(shí)現(xiàn)[J].嘉應(yīng)學(xué)院學(xué)報,2017,35(5):13-16.

        [9] 黃兢成.從Objective-C到Swift[J].程序員,2014(7):33-37.

        [10] 楊雯.Swift語言研究[J].電子技術(shù)與軟件工程,2015(11):254-255.

        [11] 萬木君.蘋果公司的Swift語言應(yīng)用前景研究[J].電子技術(shù)與軟件工程,2014(23):66-66.

        [12] 張帆.從Objective-C到Swift的軟件移植研究及實(shí)現(xiàn)[D].北京:中國科學(xué)院大學(xué),2015.

        [13] Apple Inc.Welcome to swift.org[EB/OL].https://swift.org/.

        [14] JOAB J.Apple unveils the swift language for iOS and OS X[J].Macworld,2014,31(9):11-12.

        [15] 劉樂廷,李敬兆.IOS內(nèi)存開發(fā)管理機(jī)制的研究[J].計算機(jī)與現(xiàn)代化,2013(3):196-199.

        [16] 胡宗立,祝躍飛,馬亞南,等.Cisco IOS內(nèi)存管理及其脆弱性分析[J].計算機(jī)工程,2011,37(20):24-26.

        (責(zé)任編輯:杜能鋼)

        自由成熟女性性毛茸茸应用特色| 国产精品成人99一区无码| 亚洲欧洲国产日产国码无码 | 午夜精品射精入后重之免费观看| 看全色黄大色大片免费久久| Y111111国产精品久久久| 女优免费中文字幕在线| 中文字幕一区二区黄色| 人妻丰满熟妇av无码区app| 朝鲜女人大白屁股ass| 国产av影片麻豆精品传媒| 成年毛片18成年毛片| 亚洲女同系列在线观看| 国产精品久久精品第一页| 中国人妻被两个老外三p| 国产精品高清视亚洲乱码有限公司 | 亚洲啊啊啊一区二区三区| 视频一区视频二区自拍偷拍| 亚洲一区精品无码| 激情航班h版在线观看| 亚洲AV伊人久久综合密臀性色 | 中文字幕丰满人妻被公强| 日韩精品视频久久一区二区| 国产精品久久久久9999小说 | 99精品久久久中文字幕| 日本女优中文字幕有码| 三级黄色片免费久久久| 一本色道久久88精品综合| 亚洲av熟妇高潮30p| 亚洲精品一区二区在线播放| 久久综合另类激情人妖| 无码爆乳护士让我爽| 亚洲av无码精品色午夜果冻不卡| 午夜无码熟熟妇丰满人妻| 亚洲av熟女传媒国产一区二区| 99久久久无码国产精品性| 亚洲欧洲∨国产一区二区三区| 制服无码在线第一页| 看一区二区日本视频免费| 18禁止看的免费污网站| av无码免费永久在线观看|