多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > iOS 優化內存(八)持久化

iOS 優化內存(八)持久化

來源:程序員人生   發布時間:2015-03-30 08:08:53 閱讀次數:4179次

iOS持久化


1.文件系統

不論是Mac OS X 還是iOS的文件系統都是建立在UNIX文件系統基礎之上的。

1.1 沙盒模型

在iOS中,1個App的讀寫權限只局限于自己的沙盒目錄中。

沙盒模型到底有哪些好處呢?
安全:別的App沒法修改你的程序或數據
保護隱私:別的App沒法讀取你的程序和數據
方便刪除:由于1個App所有產生的內容都在自己的沙盒中,所以刪除App只需要將沙盒刪除就能夠完全刪除程序了

iOS App沙盒中的目錄

  • App Bundle ,如xxx.app 實際上是1個目錄,里面有app本身的2進制數據和資源文件
  • Documents, 寄存程序產生的文檔數據
  • Library , 下面默許包括下面兩個目錄 Caches Preferences
  • tmp, 臨時文件目錄

如果我們想在程序中獲得上面某個目錄的路徑,應當如何實現呢? 下面就講講路徑的獲得, 通過NSPathUtilities.h中的NSSearchPathForDirectoriesInDomains函數,我們即可以獲得我們想要的路 徑。 此函數具體聲明以下:

NSArray *NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde); 
directory 目錄類型 比如Documents目錄 就是NSDocumentDirectory 
domainMask 在iOS的程序中這個取NSUserDomainMask 
expandTilde YES,表示將~展開成完全路徑

注意函數返回的類型為數組,在iOS中1般這個數組中只包括1個元素,所以直接取lastObject便可。

1.2 NSFileManager

NSFileManager提供1個類方法取得1個單例。

  1. /* Returns the default singleton instance.*/ + (NSFileManager *)defaultManager; 

下面羅列了NSFileManager的經常使用方法

  • 新建目錄

  1. - (BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(NSDictionary *)attributes error:(NSError **)error; 

createIntermediates這個參數1般為YES,表示如果目錄路徑中間的某個目錄不存在則創建之,如果是NO的話,則要保證所創建目錄的父目錄都必須已存在

  • 獲得目錄下的所有文件
  1. - (NSArray *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error; 

如果目錄為空,則返回空數組

  • 其他的1些方法

  1. - (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error; - (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error; - (BOOL)linkItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error; - (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error; 

更多的可以查看文檔 NSFileManager Class Reference。

在實際項目中,我們1般會寫1個工具類來負責項目中所有的路徑操作。

2. 歸檔(Archives) 和 序列化(Serializations)

我們常常聽到“序列化”,“反序列化”這樣的字眼,其實“序列化”的意思就是將對象轉換成字節流以便保存或傳輸,“反序列化”便是1個相反的進程,從字節流轉到對象。

在這節中觸及到1種文件類型plist,plist就是Property List 的縮寫,即所謂的屬性列表,屬性列表有兩種數據格式,1種是XML的,方便瀏覽和編輯;另外一種是2進制的,節省存儲空間,和提高效力。

在Objective-C中這個對象和字節流的互轉分成兩類:

  • 歸檔 普通自定義對象和字節流之間的轉換
  • 序列化 某些特定類型(NSDictionary, NSArray, NSString, NSDate, NSNumber,NSData)的數據和字節流之間(通常將其保存為plist文件)的轉換

不過本質上講上述兩種都是對象圖(Object Graph)和字節流之間的轉換. Apple關于序列化和歸檔的編程指南: Archives and Serializations Programming Guide 。

2.1 歸檔

如果我們需要將自定義的1個對象保存到文件,應當如何做呢? 
這里引入兩個東西:1個是NSCoding協議 ;另外一個是NSKeyedArchiver,NSKeyedArchiver其實繼承于NSCoder,可以以鍵值對的方式將對象的屬性進行序列化和反序列化。 
具體的進程可以這樣描寫 通過NSKeyedArchiver 可以將實現了NSCoding協議的對象 和 字節流 相互轉換 。

像1些框架中的數據類型如NSDictionary,NSArray,NSString... 都已實現了NSCoding協議,所以可以直接對他們進行歸檔操作。

這里來1個比較完全的例子,1個Address類,1個User類,User類下有個Address類型的屬性。

Address類

User類

使用示例

通過查看文件內容可以發現,保存的是plist的2進制數據格式。 轉成XML可以看到以下內容:

2.2 序列化

在實際的項目中,我們1般是將NSDictionary或NSArray的對象保存到文件或從文件讀取成對象。 固然這類只是適用于數據量不是很大的利用場景。 NSDictionary和NSArray 都有1個寫入文件的方法

NSDictionary和NSArray會直接寫成plist文件。

2.2.1 序列化的方式

序列化可以通過兩種途徑來進行

使用數據對象自帶的方法

寫文件

寫完的文件內容以下:


現在 持久化數據用第3方的比較多!

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 综合图| 日韩欧美亚洲国产一区二区三区 | 欧美精品色精品一区二区三区 | 国产精品久久久久久 | 18在线观看国内精品视频 | 美女牲交视频一级毛片 | 99热色| 亚洲国产精品yw在线观看 | 国产精品久久久久无毒 | 精品中文字幕一区二区三区四区 | 手机看片福利 | 亚洲国产高清在线精品一区 | 成人乱码一区二区三区四区 | 最近免费中文字幕中文高清 | 久久精品国产国语对白 | 羞羞视频免费看网站 | 亚洲综合校园春色 | 亚洲黄色中文字幕 | 欧美一区二区三区视频在线 | 国产91一区二区在线播放不卡 | 久久视频一区 | 亚洲精品老司机在线观看 | 久久美女福利视频 | 免费观看老外特级毛片 | 亚洲成人在线播放 | аbt天堂资源在线官网 | 国产日本欧美在线观看乱码 | 网站视频免费 | 久久亚洲欧洲日产国码 | 一级特黄aa大片一又好看 | 日本高清免费网站 | 亚洲一区二区三区深夜天堂 | 国产高清一 | 亚洲精品一区二区三区国产 | 欧美日本在线一区二区三区 | 午夜精品同性女女 | 成年视频xxxxx在线网站 | 手机看福利片 | 精品亚洲77777www | 欧美一区二区视频在线观看 | 欧美综合在线视频 |