ios緩存系列---1.0

来源:http://www.cnblogs.com/xinjydeshow/archive/2016/05/25/5528925.html
-Advertisement-
Play Games

1. 程式中什麼時候用到緩存 2. 緩存機制 1)第一次請求數據時,記憶體緩存中沒有數據,硬碟緩存中沒有數據。 2)當伺服器返回數據時,需要做一下步驟 1>使用伺服器的數據 2>將伺服器的數據緩存到硬碟(沙盒) 此時,記憶體緩存中有數據,硬碟緩存中沒有數據 3)再次請求數據分為兩種情況: 1>如果程式並 ...



     1. 程式中什麼時候用到緩存

 

  2. 緩存機制

    1)第一次請求數據時,記憶體緩存中沒有數據,硬碟緩存中沒有數據。

      

    2)當伺服器返回數據時,需要做一下步驟

              1>使用伺服器的數據

              2>將伺服器的數據緩存到硬碟(沙盒)

    此時,記憶體緩存中有數據,硬碟緩存中沒有數據

     

    3)再次請求數據分為兩種情況:

              1>如果程式並沒有關閉,一直在運行,

              那麼此時記憶體緩存中有數據,硬碟緩存中有數據。如果此時再次請求數據,直接使用記憶體緩存中的數據即可。

              2>如果程式重新啟動

              那麼此時記憶體緩存的數據已經消失,硬碟緩存依舊存在,如果此時再請求數據,直接使用硬碟緩存的數據即可。

    提示:從硬碟緩存中讀取數據後,記憶體緩存中又有數據了。

  3.緩存的幾種常用方法及具體如何使用

    1) 歸檔  

    2) 生成plist 

    3) NSUserDefault

    4) sqlite

 

1.1>歸檔:可以存放自定義對象  <NSCoding>

常用方法:  //存    [NSKeyedArchiver archiveRootObject:p toFile:path];

       //取  [NSKeyedUnarchiver unarchiverObjectWithFile:path];

       /*當將一個自定義對象保存到文件的時候就會調用該方法,在該方法中說明如何存儲自定義對象的屬性*/

      -(void)encodeWithCoder:(NSCoder *)aCoder

      /*當文件中讀取一個對象的時候回調用該方法,在該方法中說明如何讀取保存在文件中的對象*/

      -(id)initWithCoder:(NSCoder *)aDecoder

1 #import <Foundation/Foundation.h>
2 
3 @interface Person : NSObject<NSCoding>
4 
5 @property (nonatomic, copy) NSString *name;
6 @property (nonatomic, assign) NSInteger age;
7 @property (nonatomic, assign) BOOL sex;
8 
9 @end
#import "Person.h"

@implementation Person

//歸檔
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeInteger:self.age forKey:@"age"];
    [aCoder encodeBool:self.sex forKey:@"sex"];
}

//解檔
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
    if (self == [super init]) {
        self.name = [aDecoder decodeObjectForKey:@"name"];
        self.age = [aDecoder decodeIntegerForKey:@"age"];
        self.sex = [aDecoder decodeBoolForKey:@"sex"];
    }
    return self;
}

@end
#import "ViewController.h"
#import "Person.h"

@interface ViewController ()
@property (nonatomic, strong) Person *person;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self saveCacheData];
}

- (Person *)person
{
    if (_person == nil) {
        _person = [[Person alloc] init];
        _person.name = @"xinjinying";
        _person.age = 11;
        _person.sex = YES;
    }
    return _person;
}

#pragma mark - 歸檔存儲緩存數據
- (void)saveCacheData
{
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *cachePath = [path stringByAppendingPathComponent:@"tooyoung.toosimple"];
    NSLog(@"%@",cachePath);
    [NSKeyedArchiver archiveRootObject:self.person toFile:cachePath];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *readDataPath = [path stringByAppendingPathComponent:@"tooyoung.toosimple"];
    NSLog(@"%@",readDataPath);
    Person *person = [NSKeyedUnarchiver unarchiveObjectWithFile:readDataPath];
    NSLog(@"%@-%zd-%d",person.name,person.age,person.sex); 
}

2.1>生成plist文件

#pragma mark - 寫入讀取plist文件
- (void)writeAndReadPlistFile
{
    //讀取plist
    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"plistdemo" ofType:@"plist"];
    NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
    
    //添加一項內容
    [data setObject:@"yoyoyo" forKey:@"key"];
    
    //存入yoyoyo.plist
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *writePath = [path stringByAppendingPathComponent:@"yoyoyo.plist"];
    [data writeToFile:writePath atomically:YES];
    
}

3.1>NSUserDefault(項目里一般用來存用戶名,密碼,accessToken,版本號...)

 1 #pragma mark - NSUserdefaults
 2 - (void)userDefaultCache
 3 {
 4     //
 5     NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
 6     [userDefaults setObject:@"fuck" forKey:@"name"];
 7     [userDefaults synchronize];
 8 }
 9 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
10 {
11     //
12     NSUserDefaults *userDetaults = [NSUserDefaults standardUserDefaults];
13     NSString *name = [userDetaults objectForKey:@"name"];
14     NSLog(@"%@",name);
15 }    

 

待續...

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • LN :跟著W3School學HTML 004 內容參考自W3School [HTML 教程][1] HTML屬性 HTML 屬性總是以名稱/值對的形式出現,比如:name="value"。 屬性總是在 HTML 元素的開始標簽中規定。 實例解析 1.HTML 鏈接由 `` 標簽定義。鏈接的地址在 ...
  • search = "abc=foo&def=%5Basf%5D&xyz=5&foo=b%3Dar"; function test(search) { return search?JSON.parse('{"' + search.replace(/&/g, '","').replace(/=/g,'" ...
  • 1.each(callback) 官方解釋: 返回值:jQuery 概述 以每一個匹配的元素作為上下文來執行一個函數。 意味著,每次執行傳遞進來的函數時,函數中的this關鍵字都指向一個不同的DOM元素(每次都是一個不同的匹配元素)。而且,在每次執行函數時,都會給函數傳遞一個表示作為執行環境的元素在 ...
  • 一、H5新特性 二、css3動畫 transition: 屬性 過度時間; ...
  • 網頁是色彩的表現原理:顯示器是由一個個像素構成,利用電子束來表現色彩。像素把光的三原色:紅色(R)、綠色(G)、藍色(B)組合成的色彩按照科學原理表現出來。一個像素包含8位元色彩的信息量,又從0 ~ 255的256個單元,其中0是完全無光狀態,255是最亮狀態 Web頁面的安全色不同平臺(Mac、P ...
  • 體驗效果:http://hovertree.com/texiao/jquery/68/源碼下載:http://hovertree.com/h/bjaf/f643upc4.htm代碼如下: 轉自:http://hovertree.com/h/bjaf/switchpage.htm 特效彙總:http: ...
  • 在html文件中和在js文件中使用 內部過濾器和自定義過濾器 ...
  • 關於each()、find()、filter()遍歷節點的操作方法 each語法: each(fn) ; 返回值:jQuery fn:代表對於每個匹配元素所要執行的函數 each()方法共有三種形式 第一種(不帶參數): $('img').each(function(){ }); 註意:此時的thi ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...