国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

IOS中對象歸檔技術的研究與應用

2018-05-28 11:10李玉君
電腦知識與技術 2018年9期

李玉君

摘要:在IOS開發(fā)中,數據存儲也是一個非常重要的研究。該文通過對現在主流的4種主流數據存儲技術分析,詳細研究了對象歸檔中技術對數據的持久化操作,并使用蘋果新推出的Swift語言采用對對象的歸檔和反歸檔實現了對示例數據的存儲。

關鍵詞:IOS; Swift; NSCoding; 數據持久化

中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2018)09-0005-03

Abstract: In the IOS development, Persist Datais also a very important research. Through the analysis of four mainstream Persist Data technologies, The persistence operation of data through NSCoding in object archive is analyzed in detail.the storage of sample data is realized by the archiving and anti archiving of the object.

Key words: IOS; Swift; NSCoding; DataPersist

在移動軟件開發(fā)世界,幾乎離不開對數據的存儲。而數據存儲分為運行時存儲和持久化存儲兩種,運行時存儲在程序運行時會把數據存放在內存中,程序結束后,內容會回收,數據將不保存。因此為了程序運行更加流暢,用戶體驗更好,在實際開發(fā)中需要采用特定類型的文件將數據保存到本地?,F在主要有4種數據持久化的方法,這4種方法分別為:屬性歸檔、對象歸檔、IOS的嵌入式關系數據庫SQLite3、蘋果公司提供的持久化工具Core Data。在現實開發(fā)中,我們不需要處理大批量數據時,將不會采用SQLite和Core Data,這時只需要將對象實體做持久化保存就可,而對象類型可以通過NSCoding的委托方法來實現。本文是校級項目研究成果。編號為TP170205,題目是基于IOS環(huán)境下MVC模式成都學校資源APP設計與實現。

1 沙盒機制

IOS為每個應用程序都創(chuàng)建了一個文件系統(tǒng)結構去存儲該應用程序的文件,此區(qū)域稱為沙盒。沙盒作為一個文件系統(tǒng)結構,他可以存儲聲音、圖像、文件等文件,并且每個應用程序只能訪問自己沙盒內的數據,其他應用是無法訪問的。在蘋果系統(tǒng)中想要查看沙盒數據需要查看Library目錄。在OS X10.7以后的版本,蘋果公司默認隱藏了Library文件夾,因此打開Finder窗口后,需要按住Option鍵,并選擇前往->資源庫,向下找到Developer/CoreSimulator/devices/模擬器UDID/Data/Containers/Data/Application,可以看到模擬器中所有程序沙盒目錄,每個應用都有自己的/Documents文件夾,且僅能讀寫各自/Documents目錄中內容[1]。每個應用程序沙盒都應包含以下三個目錄:

(1)Documents:應用程序可以將數據存儲在Documents目錄中,應用程序啟用iTunes文件分享功能,則用戶可以在iTunes中看到目錄的內容,以及應用程序創(chuàng)建的所有子目錄,還可以對其更新文件。

(2)Library:應用程序也可以在這里數據存儲,存放不想分享給用戶的文件,需要時可創(chuàng)建自己的子目錄。

(3)tmp:供應存儲臨時文件,當iOS設備執(zhí)行同步時,iTunes不會備份tmp中的文件,在不需要這些文件時,應用負責刪除tmp中的文件,以免占用文件系統(tǒng)的空間。

隨機打開一個應用沙盒,如圖3所示。

從圖1可以看出應用的名稱看上去是隨機的文件夾中,這時可以使用NSSearchPathForDirectoriesInDomain()來查找各種目錄。該函數可以基于OS X平臺的Cocoa共享,獲取Document目錄的部分代碼:

Let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory,NSSearchPathDomainMask.UserDomainMask,true)

letdocunmentsDirectory = path[0] as String

通過NSSearchPathDirectory.DocumentDirectory查找Document目錄的路徑,NSSearchPathDomainMask.UserDomainMask表示搜索限制在應用沙盒內。以上函數返回的是一個匹配路徑的數字,但位于索引0處的一定是Document目錄,因為每個應用只有Document目錄,所以只有一個目錄符合指定的條件。

2 對象歸檔概述

對象歸檔是將一個或者多個對象,采用序列化的方式保存到指定的文件,再以反序列化的方式從文件恢復成對象,整個過程有些類似于壓縮和解壓縮文件的過程。在對象歸檔技術中,有一個非常重要的協議NSCoding。凡是遵守了NSCoding協議的自定義對象都可以實現對象歸檔和反歸檔。類繼承它,此類的實例才能被編碼(encode)和解碼(decode),繼承了這個類,也就實現兩個方法。這兩個方法都是必需的,一個方法將對象編碼到歸檔中:encode(with aCoder: NSCoder),另一個方法對歸檔解碼用來創(chuàng)建一個新對象,init?(coder aDecoder: NSCoder)這兩個方法都床底一個NSCoder實例,可以使用鍵值編碼(Key-Value Coding)對對象和原生數據類型(如整形)進行編碼和解碼。

3 Swift實現采用對象歸檔實例分析

如圖2學校展示界面所示,我們想存儲當前頁面上的展示的學校名字,地址,電話,網站,性質和區(qū)域數據,需要建立與數據對應的對象,然后通過NSCoding對數據進行讀寫。

1)先建立一個swift的school類文件專門用來做數據存放處理。如圖3所示。

2)創(chuàng)建一個用于存儲密鑰字符串的結構。包括學校名,地址,電話,網址,學校性質,區(qū)域和照片。

//定義類型

structPropertyKey {

static let name = “name”

static let address = “address”

static let tel = “tel”

static let website = “website”

static let property = “property”

static let area = “area”

static let photo = “photo”

}

3)讓Swift對象支持歸檔,需要讓它成為NSObject(或任何繼承與NSObject的其他類)的子類,需要建立一個簡單容器類。

classSchool :NSObject,NSCoding {

//學校屬性

var name : String

var address : String

vartel : String

var website : String

var property :String

var area : String

var photo : UIImage?

}

4)繼承于NSCoding需要實現2個方法:encode(with aCoder: NSCoder),init?(coderaDecoder: NSCoder)

//從coder中讀取數據,保存到相應的變量中,即反序列化數據

func encode(with aCoder: NSCoder) {

aCoder.encode(name, forKey: PropertyKey.name)

aCoder.encode(address, forKey: PropertyKey.address)

aCoder.encode(tel, forKey: PropertyKey.tel)

aCoder.encode(website, forKey: PropertyKey.website)

aCoder.encode(property, forKey: PropertyKey.property)

aCoder.encode(area, forKey: PropertyKey.area)

aCoder.encode(photo, forKey: PropertyKey.photo)

}

//讀取實例變量,并把這些數據寫到coder中去。

Required convenience init?(coder aDecoder: NSCoder) {

guard let name = aDecoder.decodeObject(forKey:PropertyKey.name) as? String else {

os_log(“Unable to decode the name for a JinuNiu object.”, log: OSLog.default, type: .debug)

return nil

}

let address = aDecoder.decodeObject(forKey:PropertyKey.address) as? String

lettel = aDecoder.decodeObject(forKey:PropertyKey.tel) as? String

let website = aDecoder.decodeObject(forKey:PropertyKey.website) as? String

let property = aDecoder.decodeObject(forKey:PropertyKey.property) as? String

let area = aDecoder.decodeObject(forKey:PropertyKey.area) as? String

let photo = aDecoder.decodeObject(forKey:PropertyKey.photo) as? UIImage

self.init(name:name,address:address!,tel:tel!,website:website!,property:property!,area:area!,photo:photo)

}

5)創(chuàng)建一個路徑去存放數據

那么應用位于一個名稱看上去隨機的文件夾中,應該如何檢索Documents的完整路徑,才能正確方便的讀取和寫入文件呢?我們可以使用FileManager定位到應用文件位置直接讀寫。將以下代碼加入到之前建立的Swift文件。

//存儲位置

static let DocumentsDirectory = FileManager().urls(for: .documentDirectory, in: .userDomainMask).first!

static let ArchiveURL = DocumentsDirectory.appendingPathComponent(“school”)

4 結束語

在手機使用率越來越高的今天,為用戶提供快而準的服務是每個行業(yè)發(fā)展的必然趨勢,數據的快速存儲可以明顯提高軟件性能,提高用戶體驗度,可想而知它在軟件開發(fā)中的重要性之大。為了更好學習數據存儲的知識,我們非常有必要對IOS中數據處理有一個深刻的認識,認識其重要性。未來,我們還將更好的使用數據存儲技術,讓其更好地為我們未來的工作生活服務,加快計算機信息化的發(fā)展。本文通過對對象歸檔技術的分析及實現希望能對正在做這部分的同行提供學習和借鑒。

參考文獻:

[1] David Mark.精通IOS開發(fā)[M].人民郵電出版社,2016:301-314.

[2] 傳智播客高教產品研發(fā)部[M].IOS開發(fā)項目化入門教程.人民郵電出版社,2017:236-254.

[3] 李偉夢. Swift編程入門經典[M]. 北京:清華大學出版社,2015.

[4] The Swift Programming Language (Swift 4.0.3).Language Guide.2017

[5] 李艷華. iOS平臺上基于MVC的設計模式的“音悅臺”的設計與實現[J].電子技術,2015(9).

华宁县| 虹口区| 高要市| 会理县| 云霄县| 新安县| 固阳县| 新建县| 年辖:市辖区| 越西县| 浮山县| 邓州市| 广安市| 平罗县| 信阳市| 泌阳县| 长白| 丰原市| 丽江市| 荔波县| 龙川县| 宝丰县| 肇州县| 突泉县| 安岳县| 平阴县| 涿州市| 江口县| 普定县| 浦城县| 房产| 习水县| 鲁山县| 得荣县| 东乡| 宜丰县| 昭苏县| 日照市| 洱源县| 陆河县| 上高县|