日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS数据存储

發布時間:2024/4/17 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS数据存储 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
iOS沙盒機制(1)
?iOS應用程序只能在為該改程序創建的文件系統中讀取文件,不可以去其它地方訪問,此區域被稱為沙盒 ?所有的非代碼文件都要保存在此,例如圖像、圖標、聲音、映像、屬性列表、文本文件等 –
1) 每個應用程序都有自己的存儲空間 –2) 應用程序不能翻過自己的圍墻去訪問別的存儲空間中的內容 –3) 應用程序請求的數據都要通過權限檢測,假如不符合條件,不會被放行
iOS沙盒結構分析 ?應用程序包:(Bundle)包含了所有的資源文件和可執行文件 ? ?Documents:保存應用運行時生成的需要持久化的數據,iTunes同步設備時會備份該目錄。例如,游戲應用可將游戲存檔保存在該目錄 ? ?Library
/Caches:保存應用運行時生成的需要持久化的數據,iTunes同步設備時不會備份該目錄。一般存儲體積較大、不需要備份的非重要數據 ? ?Library/Preference:保存應用的所有偏好設置,iOS的設置應用會在該目錄中查找應用的設置信息。iTunes同步設備時會備份該目錄 ? ?tmp:保存應用運行時所需的臨時數據,使用完畢后再將相應的文件從該目錄刪除。應用沒有運行時,系統也可能會清除該目錄下的文件。iTunes同步設備時不會備份該目錄


?

沙盒目錄常用獲取方式(1) 獲取程序的Home目錄 NSString *home = NSHomeDirectory();注意: 虛擬機Home目錄: /Users/userName/Library/Application Support/iPhone Simulator/6.1/Applications/C926CCFA-A110-45E2-B4AD-7E5679152D99 真機Home目錄: /var/mobile/Applications/304D8530-98CB-4043-A208-EBF06E8ADBB9沙盒目錄常用獲取方式(2) 獲取Documents目錄// 2、獲取Documents目錄 // NSUserDomainMask 代表從用戶文件夾下找 // YES 代表展開路徑中的波浪字符“~” NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); // 只有一個匹配目錄,所以這個集合里面只有一個元素 NSString *doc = documents[0];// 使用字符串拼接的方式獲取目錄名 NSString *doc2 = [home stringByAppendingPathComponent:@"Documents"];注意: 不建議采用字符串拼接的方式獲取目錄,因為新版本的操作系統可能會修改默認目錄名稱。沙盒目錄常用獲取方式(3) 獲取Cache目錄 NSArray *caches = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cache = caches[0];Preferences目錄 通過NSUserDefaults類存取該目錄下的設置信息獲取Tmp目錄 NSString *tmpDir = NSTemporaryDirectory();

?

技巧:在Mac顯示隱藏文件的方法 顯示Mac隱藏文件的命令: defaults write com.apple.finder AppleShowAllFiles -bool true隱藏Mac隱藏文件的命令: defaults write com.apple.finder AppleShowAllFiles -bool false注意:需要重啟Finder另外, 在Finder中,按shift+command+g,然后輸入:/Users/username/Library/Application Support/iPhone Simulator/6.1/Applications也可以進入虛擬機應用程序目錄,其中username是本機用戶名

?

iOS應用數據存取的常用方式XML屬性列表 —— PList NSKeyedArchiver 歸檔 Preference(偏好設置) SQLite3 Core Data XML屬性列表——PList屬性列表是一種XML格式的文件,擴展名為plist如果對象是NSArray、NSDictionary類型,可以使用writeToFile:atomically:方法直接寫入到屬性列表文件 如果對象是NSString、NSData類型,也可以使用writeToFile:atomically:方法寫入對應的文件說明:atomically(寫入原子性) YES:先創建一個臨時文件,直到內容完成后再導入目標文件 NO:直接寫入文件注意:如果所指定保存文件的路徑不存在,寫入文件方法不會報錯,文件也不會被保存! 屬性列表的局限性只有支持的數據類型可以被序列化,存儲到plist中。無法將其他Cocoa對象存儲到plist,不能存儲自定義對象 支持的數據類型: Array DictionaryBoolean Date Number String

?將NSArray寫入沙盒文件 ?將NSDictionary寫入沙盒文件 ? 其他格式數據的保存NSString —— 保存時需要自定字符串編碼UIImage —— 注意UIImage無法寫入文件,需要使用NSData數據類型進行中轉,NSData可以將任何類型的文件,以二進制格式存儲// 生成圖像數據 NSData *data = UIImagePNGRepresentation(image); Archiver & Unarchiver歸檔和恢復 特點: 支持復雜的數據對象,包括自定義對象 對自定義對象進行歸檔處理,對象中的屬性需要是基本數據類型,或者是實現了NSCoding協議的對象實例 自定義對象的類也需要實現NSCoding應用場合 在本地保存自定義對象或數組 保存游戲狀態 在網絡間傳輸自定義對象數據 …… Archiver & Unarchiver歸檔和恢復 特點: 支持復雜的數據對象,包括自定義對象 對自定義對象進行歸檔處理,對象中的屬性需要是基本數據類型,或者是實現了NSCoding協議的對象實例 自定義對象的類也需要實現NSCoding應用場合 在本地保存自定義對象或數組 保存游戲狀態 在網絡間傳輸自定義對象數據 …… NSKeyedArchiverNSString、NSDictionary、NSArray、NSData、NSNumber等類型的對象,可以直接用NSKeyedArchiver進行歸檔和恢復不是所有的對象都可以直接用這種方法進行歸檔,只有遵守了NSCoding協議的對象才可以 NSCoding協議方法encodeWithCoder: 每次歸檔對象時,都會調用這個方法。一般在這個方法里面指定如何歸檔對象中的每個實例變量,可以使用encodeObject:forKey:方法歸檔實例變量initWithCoder: 每次從文件中恢復(解碼)對象時,都會調用這個方法。一般在這個方法里面指定如何解碼文件中的數據為對象的實例變量,可以使用decodeObject:forKey:方法解碼實例變量NSCoding協議方法的調用 [NSKeyedArchiver archiveRootObject:toFile:]會首先調用被歸檔類對象的encodeWithCoder方法對該對象的屬性編碼,然后再寫入文件進行歸檔[NSKeyedUnarchiver unarchiveObjectWithFile:path]從文件加載數據后,會調用類的initWithCoder方法,實例化該類對象,并恢復屬性NSKeyedArchiver——歸檔對象的注意 如果父類也遵守了NSCoding協議,需要注意:在encodeWithCoder:方法中加上一句 [super encodeWithCoder:aCoder]; 確保繼承的實例變量也能被編碼,即也能被歸檔在initWithCoder:方法中加上一句 self = [super initWithCoder:aDecoder]; 確保繼承的實例變量也能被解碼,即也能被恢復 偏好設置——寫入很多iOS應用都支持偏好設置,比如保存用戶名、密碼、字體大小等設置,iOS提供了一套標準的解決方案來為應用加入偏好設置功能 每個應用都有個NSUserDefaults實例,通過它來存取偏好設置 例如:保存用戶名、字體大小、是否自動登錄 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:@"itcast.cn" forKey:@"userName"]; [defaults setFloat:18.0f forKey:@"fontSize"]; [defaults setBool:YES forKey:@"autoLogin"];

偏好設置——讀取// 讀取系統偏好 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *userName = [defaults objectForKey:@"userName"]; float fontSize = [defaults floatForKey:@"fontSize"]; BOOL autoLogin = [defaults floatForKey:@"autoLogin"];注意:UserDefaults設置數據時,不是立即寫入,而是根據時間戳定時地把緩存中的數據寫入本地磁盤。所以調用了set方法之后數據有可能還沒有寫入磁盤,應用程序就終止了。出現以上問題,可以通過調用synchornize方法強制寫入: [defaults synchronize];

?

轉載于:https://www.cnblogs.com/HJiang/p/4280190.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的iOS数据存储的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。