iOS - LocalCache 本地數據緩存

1、自定義方式本地數據緩存

1.1 自定義緩存 1

  • 沙盒路徑下的 Library/Caches 用來存放緩存文件,保存從網絡下載的請求數據,后續仍然需要繼續使用的文件,例如網絡下載的離線數據,圖片,視頻文件等。該目錄中的文件系統不會自動刪除,可以做離線訪問。它的存放時間比 tmp 下的長,但是不如 Library 下的其它目錄。總的來說 Caches 目錄下存放的數據不能是應用程序運行所必需的,但是能提高應用訪問性能的。可寫入應用支持文件,保存應用程序再次啟動需要的信息。iTunes 不會對這個目錄的內容進行備份。要求程序員必需提供一個完善的清除緩存目錄的 "解決方案"。

  • Objective-C

        // 寫緩存- (void)writeLocalCacheData:(NSData *)data withKey:(NSString *)key {// 設置存儲路徑NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:key];// 判讀緩存數據是否存在if ([[NSFileManager defaultManager] fileExistsAtPath:cachesPath]) {// 刪除舊的緩存數據[[NSFileManager defaultManager] removeItemAtPath:cachesPath error:nil];}// 存儲新的緩存數據[data writeToFile:cachesPath atomically:YES];}// 讀緩存- (NSData *)readLocalCacheDataWithKey:(NSString *)key {NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:key];// 判讀緩存數據是否存在if ([[NSFileManager defaultManager] fileExistsAtPath:cachesPath]) {// 讀取緩存數據return [NSData dataWithContentsOfFile:cachesPath];}return nil;}// 刪緩存- (void)deleteLocalCacheDataWithKey:(NSString *)key {NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:key];// 判讀緩存數據是否存在if ([[NSFileManager defaultManager] fileExistsAtPath:cachesPath]) {// 刪除緩存數據[[NSFileManager defaultManager] removeItemAtPath:cachesPath error:nil];}}
  • Swift

        // 寫緩存func writeLocalCacheData(data:NSData, withKey key:String) {// 設置存儲路徑let cachesPath = NSSearchPathForDirectoriesInDomains(.CachesDirectory, .UserDomainMask, true)[0].stringByAppendingString("/\(key)")// 判讀緩存數據是否存在if NSFileManager.defaultManager().fileExistsAtPath(cachesPath) {// 刪除舊的緩存數據try! NSFileManager.defaultManager().removeItemAtPath(cachesPath)}// 存儲新的緩存數據data.writeToFile(cachesPath, atomically: true)}// 讀緩存func readLocalCacheDataWithKey(key:String) -> NSData? {let cachesPath = NSSearchPathForDirectoriesInDomains(.CachesDirectory, .UserDomainMask, true)[0].stringByAppendingString("/\(key)")// 判讀緩存數據是否存在if NSFileManager.defaultManager().fileExistsAtPath(cachesPath) {// 讀取緩存數據return NSData(contentsOfFile: cachesPath)}return nil}// 刪緩存func deleteLocalCacheDataWithKey(key:String) {let cachesPath = NSSearchPathForDirectoriesInDomains(.CachesDirectory, .UserDomainMask, true)[0].stringByAppendingString("/\(key)")// 判讀緩存數據是否存在if NSFileManager.defaultManager().fileExistsAtPath(cachesPath) {// 刪除緩存數據try! NSFileManager.defaultManager().removeItemAtPath(cachesPath)}}

1.2 自定義緩存 2

  • 沙盒路徑下的 Library/Preferences 常用來放置配置文件、數據文件、模板等應用在運行中與用戶相關,而又希望對用戶不可見的文件,如系統偏好設置,用戶偏好設置等文件。使用 NSUserDefaults 類進行偏好設置文件的創建、讀取和修改。

  • Objective-C

        // 寫緩存- (void)saveCacheData:(NSData *)data withType:(int)type andID:(int)_id {NSUserDefaults *setting = [NSUserDefaults standardUserDefaults];NSString *key = [NSString stringWithFormat:@"detail-%d-%d", type, _id];[setting setObject:data forKey:key];[setting synchronize];}// 讀緩存- (NSData *)getCacheDataWithType:(int)type andID:(int)_id {NSUserDefaults * setting = [NSUserDefaults standardUserDefaults];NSString *key = [NSString stringWithFormat:@"detail-%d-%d", type, _id];return [setting objectForKey:key];}// 刪緩存- (void)removeCacheDataWith:(int)type andID:(int)_id {NSUserDefaults * setting = [NSUserDefaults standardUserDefaults];NSString *key = [NSString stringWithFormat:@"detail-%d-%d", type, _id];[setting removeObjectForKey:key];[setting synchronize];}
  • Swift

        // 寫緩存func saveCacheData(data:NSData, withType type:Int, andID _id:Int) {let setting = NSUserDefaults.standardUserDefaults()let key = String(format: "detail-%d-%d", type, _id)setting.setObject(data, forKey: key)setting.synchronize()}// 讀緩存func getCacheDataWithType(type:Int, andID _id:Int) -> NSData? {let setting = NSUserDefaults.standardUserDefaults()let key = String(format: "detail-%d-%d", type, _id)return setting.objectForKey(key) as? NSData}// 刪緩存func removeCacheDataWithType(type:Int, andID _id:Int) {let setting = NSUserDefaults.standardUserDefaults()let key = String(format: "detail-%d-%d", type, _id)setting.removeObjectForKey(key)setting.synchronize()}   

2、EGOCache 方式本地數據緩存

  • EGOCache 一個簡單、線程安全的基于 key-value 的緩存框架,原生支持 NSString、UI/NSImage、和 NSData,也支持儲存任何實現 <NSCoding> 協議的類。
  • EGOCache 只有一個類,并且為單例類,只有 EGOCache.h 和 EGOCache.m 兩個文件。
  • EGOCache 只提供了磁盤緩存,沒有提供內存緩存,同時,也提供了清理緩存的方法。
  • EGOCache 可以設定緩存過期時間,默認是 1 天,過期的緩存在創建 EGOCache 對象時會被刪除。

2.1 添加 EGOCache

  • Github 網址:https://github.com/enormego/EGOCache

  • EGOCache 使用 ARC

  • Objective-C

        // 添加第三方庫文件EGOCache-2.1.3// 包含頭文件#import "EGOCache.h"
  • Swift

        // 添加第三方庫文件EGOCache-2.1.3// 創建名為 “項目名-Bridging-Header.h” 的橋接頭文件,如:SwiftLocalCache-Bridging-Header.h// 在 TARGETS -> Build Setting -> Swift Compiler - Code generation -> Objective-C Bridging Header 中// 添加 “項目名/項目名-Bridging-Header.h” 路徑,如:SwiftLocalCache/SwiftLocalCache-Bridging-Header.h// 在創建的橋接頭文件中包含頭文件#import "EGOCache.h"

2.2 EGOCache 緩存

  • Objective-C

        // 判斷緩存數據是否存在BOOL hasLocalCache = [[EGOCache globalCache] hasCacheForKey:@"qqCache"];// 讀取緩存數據NSData *localData = [[EGOCache globalCache] dataForKey:@"qqCache"];// 存儲緩存數據[[EGOCache globalCache] setData:data forKey:@"qqCache"];
  • Swift

        // 判斷緩存數據是否存在let hasLocalCache = EGOCache.globalCache().hasCacheForKey("qqCache")// 讀取緩存數據let localData = EGOCache.globalCache().dataForKey("qqCache")// 存儲緩存數據EGOCache.globalCache().setData(data, forKey: "qqCache")

2.3 EGOCache 屬性方法

  • 判斷緩存數據是否存在方法

        // 判斷指定緩存的數據是否存在- (BOOL)hasCacheForKey:(NSString* __nonnull)key;
  • 存儲緩存數據方法

        // 存儲 NSData 型數據- (void)setData:(NSData* __nonnull)data forKey:(NSString* __nonnull)key;- (void)setData:(NSData* __nonnull)data forKey:(NSString* __nonnull)key withTimeoutInterval:(NSTimeInterval)timeoutInterval;// 存儲 NSString 型數據- (void)setString:(NSString* __nonnull)aString forKey:(NSString* __nonnull)key;- (void)setString:(NSString* __nonnull)aString forKey:(NSString* __nonnull)key withTimeoutInterval:(NSTimeInterval)timeoutInterval;// 存儲 UIImage 型數據- (void)setImage:(UIImage* __nonnull)anImage forKey:(NSString* __nonnull)key;- (void)setImage:(UIImage* __nonnull)anImage forKey:(NSString* __nonnull)key withTimeoutInterval:(NSTimeInterval)timeoutInterval;// 存儲 PList 型數據- (void)setPlist:(nonnull id)plistObject forKey:(NSString* __nonnull)key;- (void)setPlist:(nonnull id)plistObject forKey:(NSString* __nonnull)key withTimeoutInterval:(NSTimeInterval)timeoutInterval;// 存儲 OBject 型數據- (void)setObject:(nonnull id<NSCoding>)anObject forKey:(NSString* __nonnull)key;- (void)setObject:(nonnull id<NSCoding>)anObject forKey:(NSString* __nonnull)key withTimeoutInterval:(NSTimeInterval)timeoutInterval;
  • 讀取緩存數據方法

        // 讀取 NSData 型緩存數據- (NSData* __nullable)dataForKey:(NSString* __nonnull)key;// 讀取 NSString 型緩存數據- (NSString* __nullable)stringForKey:(NSString* __nonnull)key;// 讀取 UIImage 型緩存數據- (UIImage* __nullable)imageForKey:(NSString* __nonnull)key;// 讀取 PList 型緩存數據- (NSData* __nullable)plistForKey:(NSString* __nonnull)key;// 讀取 OBject 型緩存數據- (nullable id<NSCoding>)objectForKey:(NSString* __nonnull)key;
  • 復制緩存數據方法

        // 復制指定緩存數據 - (void)copyFilePath:(NSString* __nonnull)filePath asKey:(NSString* __nonnull)key;- (void)copyFilePath:(NSString* __nonnull)filePath asKey:(NSString* __nonnull)key withTimeoutInterval:(NSTimeInterval)timeoutInterval;
  • 清除緩存數據方法

        // 清除全部緩存數據- (void)clearCache;// 清除指定緩存的數據- (void)removeCacheForKey:(NSString* __nonnull)key;
  • 讀取緩存信息方法

        // 獲取指定緩存的緩存時間- (NSDate* __nullable)dateForKey:(NSString* __nonnull)key;// 獲取所有緩存的 key 值- (NSArray* __nonnull)allKeys;
  • 創建緩存對象方法

        // 這種方法創建的緩存對象不是單例類,可以自己設置緩存路徑- (nonnull instancetype)initWithCacheDirectory:(NSString* __nonnull)cacheDirectory;
  • 緩存時間屬性

        // Default is 1 day@property(nonatomic) NSTimeInterval defaultTimeoutInterval;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397859.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397859.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397859.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何構建ASP.NET MVC4JQueryAJaxJSon示例

背景&#xff1a; 博客中將構建一個小示例&#xff0c;用于演示在ASP.NET MVC4項目中&#xff0c;如何使用JQuery Ajax。 直接查看JSon部分 步驟&#xff1a; 1&#xff0c;添加控制器(HomeController)和動作方法(Index),并為Index動作方法添加視圖(Index.cshtml),視圖中HTML如…

echarts 有引導線和內部文字_點、線、面構圖的異同以及相互轉化

點、線、面構圖既有相似性&#xff0c;又有差異性。相似的是都有對齊、強調、群組、重復、突出層次的作用&#xff0c;不同的是點的特點是聚焦、線的特點是運動和方向性&#xff0c;面的特性是體量感、穩定性。點的情感最弱&#xff0c;線、面的情感要比點豐富。一、點、線、面…

c語言上機報告之水仙花數,C語言上機報告之水仙花數..doc

C語言上機報告之水仙花數.C語言程序設計上機報告課題名稱&#xff1a;水仙花數的算法院 (系)&#xff1a;工程學院專業班 級&#xff1a; 052126學生姓名&#xff1a; 喻培學 號&#xff1a; 20121004040指導教師&#xff1a; 熊慕舟2013年11月24日C語言上機報告之水仙花數上機…

《Python黑帽子:黑客與滲透測試編程之道》 Web攻擊

Web的套接字函數庫&#xff1a;urllib2 一開始以urllib2.py命名腳本&#xff0c;在Sublime Text中運行會出錯&#xff0c;糾錯后發現是重名了&#xff0c;改過來就好&#xff1a; #!/usr/bin/python #codingutf-8 import urllib2url "http://www.baidu.com"headers …

vCenter Converter Standalone使用文檔

文檔目的能夠使用vCenter Converter Standalone 將物理機操作系統遷移到虛擬機操作系統基礎知識vCenter Converter Standalone 能將物理機上的操作系統、VMware虛擬機上的操作系統或者Hype-V 上的虛擬機操作系統遷移到VMware上。系統環境操作系統&#xff1a;Windows Server 20…

1093芯片做正弦波逆變器_正弦波逆變器中的SPWM調制(鐘任生)

歡迎加入技術交流QQ群(2000人)&#xff1a;電力電子技術與新能源 905723370高可靠新能源行業頂尖自媒體在這里有電力電子、新能源干貨、行業發展趨勢分析、最新產品介紹、眾多技術達人與您分享經驗&#xff0c;歡迎關注我們&#xff0c;搜索微信公眾號&#xff1a;電力電子技術…

android 手機短信恢復,安卓手機短信刪除了怎么恢復?簡單恢復的方法

原標題&#xff1a;安卓手機短信刪除了怎么恢復&#xff1f;簡單恢復的方法安卓手機短信刪除了怎么恢復&#xff1f;手機短信是生活中不經常使用到&#xff0c;但是依然是十分重要的存在&#xff0c;因為我們現在比較喜歡用社交軟件與別人進行交流&#xff0c;但是在一些相對重…

Oracle-查看oracle是否有表被鎖

問題現象&#xff1a; 查看oracle是否有表被鎖 解決方法&#xff1a; select sid,serial#,program,terminal,username,b.object_id,c.object_name from v$session a, v$locked_object b, dba_objects c where a.sid b.session_id and b.object_id c.object_id;轉載于:http…

Python循環的一些基本練習

#1:# name input(請輸入你的身份)# if name egon:# print(--> 超級管理員)# elif name tom:# print(--> 普通管理員)# elif name jack,rain:# print(--> 業務主管)# elif name 其他:# print(--> 普通用戶)#2# today input(今天是星期幾&…

bash下個人習慣的一些文件設置

2019獨角獸企業重金招聘Python工程師標準>>> bash_profile export PATH/usr/local/bin:$PATH export EDITORviinputrc set editing-mode vi #set editing-mode emacs set show-all-if-ambiguous on set completion-ignore-case on set meta-flag on set conver…

docker打包鏡像上傳_Jenkins | 一鍵打包部署Spring Boot 應用的Docker鏡像

一、前言1、本文主要內容將在項目中實際使用到的相關東西整理記錄一波&#xff0c;同時可以方便其他同學在使用到的時候參考一下(自己也備忘)&#xff0c;有不對的地方&#xff0c;歡迎指出~~Docker部署SpringBoot 項目通用Dockerfile文件、腳本Jenkins新建任務圖文詳解3、本文…

android 發送短信 廣播 demo,向Android模擬器打電話發短信的簡單方法

在開發android應用程序時&#xff0c;有時候需要測試一下向android手機撥打電話發送短信時該應用程序的反應。譬如編寫一個廣播接收器&#xff0c;來提示用戶有短信收到或者處理短信&#xff0c;就需要向該手機發送短信來進行測試。這里介紹一種簡單的向android模擬器打電話發短…

android 隱藏鍵盤時ui延遲恢復,android 軟鍵盤的顯示與隱藏問題的研究

在android中&#xff0c;常常會和輸入法的軟件鍵盤交互。在Manifest文件中&#xff0c;系統給activity的一個屬性-windowSoftInputMode來控制輸入法的顯示方式。該屬性提供了Activity的window與軟鍵盤的window交互的方式。這里的屬性設置有雙方面的影響&#xff1a;1.軟鍵盤的顯…

天才基本法_《天才基本法》強推!年度神仙小說,看完這本書我竟然愛上了數學...

《天才基本法》——長洱小說文案元寶的書評這個真的是本年度的神仙小說&#xff0c;講述了女主回到少女時代&#xff0c;可以和他一直暗戀的數學天才重來一遍。女主讓男主改變了覺得她碌碌無為的看法&#xff0c;也改變了自己的人生。本書最大的主角其實是數學&#xff01;天知…

dataTables插件使用

引用文件 <!-- DataTables CSS --> <link rel"stylesheet" type"text/css" href"http://cdn.datatables.net/1.10.7/css/jquery.dataTables.css"><!-- jQuery --> <script type"text/javascript" charset"u…

一行代碼,發送郵件

朋友讓我給他媳婦兒肚子里的孩子想個名字 走的越來越快了&#xff0c;有天看到一個論點關于說地域會影響人的一輩子。其實想想的確有這個理兒&#xff0c;這使我想起來每天早上擠地鐵的時候&#xff0c;其中有一個A站的人總是特別彪悍的往里擠&#xff0c;但B站的人就是永遠不會…

js call,apply,bind三個方法的區別

相同點&#xff1a; 都是能夠改變this的指向 不同點&#xff1a; 1.call()&#xff1a;傳參方式跟bind一樣&#xff08;都是以逗號隔開的傳參方式&#xff09;&#xff0c;但是跟apply&#xff08;以數組的形式傳參&#xff09;不一樣&#xff0c; 2.bind(): 此方法應用后的情形…

千年鴻蒙 盼爾來兮是什么意思,鴻蒙是什么意思_鴻蒙的意思和出處_我愛歷史網...

鴻蒙&#xff0c;是一個漢語詞語&#xff0c;亦作“鴻濛”。中國神話傳說的遠古時代&#xff0c;傳說在盤古開天辟地之前&#xff0c;世界是一團混沌狀&#xff0c;因此把那個時代稱作鴻蒙時代&#xff0c;后來該詞也常被用來泛指遠古時代。引證解釋亦作“鴻濛”。1、宇宙形成前…

python中調用萬年歷_python 打印萬年歷

題目&#xff1a;打印萬年歷已知條件閏年條件&#xff1a;能被4整除且不能被100整除&#xff0c;或者能被400整除1900年1月1日 是周一解題思路判斷閏年;判斷當月有多少天;這個月的1號是從周幾開始的;格式化打印日歷。解題代碼#判斷年份是否為閏年def is_leap_year(year):if (ye…

求水仙花數

求出所有的"水仙花數"&#xff0c;所謂"水仙花數"是指一個三位數&#xff0c;其各位數字立方和等于該數本身。 1 /**2 * 題目&#xff1a;打印出所有的"水仙花數"&#xff0c;所謂"水仙花數"是指一個三位數&#xff0c;其各位數字立方…