1. 程式人生 > 實用技巧 >Sagit.Framework For IOS 開發框架入門教程8:硬碟快取STFile

Sagit.Framework For IOS 開發框架入門教程8:硬碟快取STFile

前言:

本篇介紹STFile,硬碟相關的讀寫操作。

1、STFile硬碟快取的介紹:

IOS的硬碟存取,內部是個沙盒,所以檔案的目錄較多,應用也較多。

不同的目錄,有不同的用途,基本的定義如下:

//!用於存檔資料到plist檔案中,預設存檔沙盒的Library/Cache目錄(iTunes不會備份此目錄,此目錄下檔案不會在應用退出刪除。一般存放體積比較大,不是特別重要的資源,比如快取資料。快取資料在裝置低儲存空間時可能會被刪除。)
@interface STFile : NSObject

//!對應沙盒的Home目錄(主目錄)
@property (nonatomic,retain) STFile* Home;
//!對應沙盒的Document目錄:用於儲存使用者資料,該目錄下的所有檔案會進行iCloud或iTunes備份 @property (nonatomic,retain) STFile* Document; //!對應沙盒的Libaray目錄(該路徑下的資料夾,除Caches以外,都會被iTunes備份。) @property (nonatomic,retain) STFile* Libaray; //!對應沙盒的Tmp目錄(目錄用於存放臨時檔案,APP重新啟動時會清除這個路徑下的檔案。該路徑下的檔案不會被iTunes備份。一般用來儲存臨時檔案,比如:相機拍攝完成時的照片視訊都會被暫時儲存到這個路徑。) @property (nonatomic,retain) STFile* Temp;
//!存檔系統配置資訊,對應沙盒的Tmp目錄 Library/Preferences(包含應用程式的偏好設定檔案。NSUserDefaults就是預設存放在此資料夾下面。) @property (nonatomic,retain)NSUserDefaults* Setting; //!存檔的檔名(plist)。 @property (readonly,nonatomic,copy) NSString* fileName; + (instancetype)share; //!獲取檔案的大小(MB) - (CGFloat)size; //!清除所有檔案快取 - (void)clear:(void(^)(BOOL success))block;
//!設定檔案快取 - (void)set:(NSString*)key value:(id)value; //!獲取檔案快取 - (id)get:(NSString*)key; //!移除檔案快取 - (void)remove:(NSString*)key; @end

操作模式和記憶體操作基本一致。

然後多了幾個目錄指定,可以指定操作的目錄(預設操作的是Cache目錄)

2、基本的使用方法:

STFile在Sagit全域性物件裡定義了單例,所以呼叫方式的起步方法是:Sagit.File 開頭。

如果是操作Cache目錄,直接[Saget.File get:@"xxx"];

如果要操作其它目錄,則指定目錄後再操作。

檔案操作和記憶體操作其它一致。

多了一個獲取資料夾大小,用於清空快取,參考程式碼如下:

-(void)cleanCache:(UITableViewCell*)cell
{
    [[cell.textLabel text:@"清除快取"] onClick:^(id view) {
        [Sagit.File clear:^(BOOL success) {
            if (success)
            {
                [Sagit.File.Temp clear:nil];
                [self.msgBox prompt:@"清除成功!"];
            }else {
                [self.msgBox prompt:@"清除完成!"];
            }
            [cell.accessoryView stValue:@"0M"];
        }];
    }];
    [[[UILabel new] text:@"正在計算大小..."] block:nil on:^(UILabel* label) {
        [[[[label font:24] textColor:@"#555555"] textAlignment:NSTextAlignmentRight] sizeToFit];
        cell.accessoryView=label;
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            CGFloat size = Sagit.File.size;
            CGFloat tempSize=Sagit.File.Temp.size;
            dispatch_sync(dispatch_get_main_queue(), ^{
                [label text : [NSString stringWithFormat:@"%.2fM", size+tempSize]];
            });
        });
    }];
}