IOS 沙箱與清除緩衝,ios沙箱緩衝

來源:互聯網
上載者:User

IOS 沙箱與清除緩衝,ios沙箱緩衝

SandBox,沙箱機制,是一種安全體系。我們所開發的每一個應用程式在裝置上會有一個對應的沙箱檔案夾,當前的程式只能在自己的沙箱檔案夾中讀取檔案,不能訪問其他應用程式的沙箱。在項目中添加的所有非代碼的資源,比片、聲音、屬性列表等都存在自己的沙箱中。此外,在程式運行中動態產生的或者從網路擷取的資料,如果要儲存,也都是儲存到沙箱中。

沙箱中的預設資料夾

(1)Documents:蘋果建議將程式中建立的或在程式中瀏覽到的檔案資料儲存在該目錄下,iTunes備份和恢複的時候會包括此目錄

(2)Library:儲存程式的預設設定或其它狀態資訊;

裡面又包含兩個檔案夾Caches和Preference;

Caches,存放快取檔案,iTunes不會備份此目錄

(3)tmp:提供一個即時建立臨時檔案的地方

擷取沙箱中的不同目錄

代碼

//  JRSandBoxPath.h//  Fmdb////  Created by jerei on 15-10-30.//  Copyright (c) 2015年 jerei. All rights reserved.//#import <Foundation/Foundation.h>@interface JRSandBoxPath: NSObject// 擷取沙箱Document的檔案目錄+ (NSString *)getDocumentDirectory;// 擷取沙箱Library的檔案目錄+ (NSString *)getLibraryDirectory;// 擷取沙箱Library/Caches的檔案目錄+ (NSString *)getCachesDirectory;// 擷取沙箱Preference的檔案目錄+ (NSString *)getPreferencePanesDirectory;// 擷取沙箱tmp的檔案目錄+ (NSString *)getTmpDirectory;@end////  JRSandBoxPath.m//  Fmdb////  Created by jerei on 15-10-30.//  Copyright (c) 2015年 jerei. All rights reserved.//#import " JRSandBoxPath.h"@implementation JRSandBoxPath#pragma mark - 擷取沙箱Document的檔案目錄+ (NSString *)getDocumentDirectory{    return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];}#pragma mark - 擷取沙箱Library的檔案目錄+ (NSString *)getLibraryDirectory{    return [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];}#pragma mark - 擷取沙箱Library/Caches的檔案目錄+ (NSString *)getCachesDirectory{    return [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];}#pragma mark - 擷取沙箱Preference的檔案目錄+ (NSString *)getPreferencePanesDirectory{    return [NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory, NSUserDomainMask, YES) lastObject];}#pragma mark - 擷取沙箱tmp的檔案目錄+ (NSString *)getTmpDirectory{    return    NSTemporaryDirectory();}@end

清除緩衝

在開發的過程中,遇到有用的資料,會進行緩衝,當該資料不需要時,可以清除。在這裡整理了幾個方法,統計問價的大小,清除指定檔案,清除指定目錄下的全部檔案等。

代碼

//  JRCleanCaches.h//  Fmdb////  Created by jerei on 15-10-30.//  Copyright (c) 2015年 jerei. All rights reserved.//#import <Foundation/Foundation.h>@interface JRCleanCaches : NSObject// 根據路徑返回目錄或檔案的大小+ (double)sizeWithFilePath:(NSString *)path;// 得到指定目錄下的所有檔案+ (NSArray *)getAllFileNames:(NSString *)dirPath;// 刪除指定目錄或檔案+ (BOOL)clearCachesWithFilePath:(NSString *)path;// 清空指定目錄下檔案+ (BOOL)clearCachesFromDirectoryPath:(NSString *)dirPath;@end////  JRCleanCaches.m//  Fmdb////  Created by jerei on 15-10-30.//  Copyright (c) 2015年 jerei. All rights reserved.//#import "JRCleanCaches.h"@implementation JRCleanCaches#pragma mark - 根據路徑返回目錄或檔案的大小+ (double)sizeWithFilePath:(NSString *)path{    // 1.獲得檔案夾管理者    NSFileManager *manger = [NSFileManager defaultManager];        // 2.檢測路徑的合理性    BOOL dir = NO;    BOOL exits = [manger fileExistsAtPath:path isDirectory:&dir];    if (!exits) return 0;        // 3.判斷是否為檔案夾    if (dir) { // 檔案夾, 遍曆檔案夾裡面的所有檔案        // 這個方法能獲得這個檔案夾下面的所有子路徑(直接\間接子路徑)        NSArray *subpaths = [manger subpathsAtPath:path];        int totalSize = 0;        for (NSString *subpath in subpaths) {            NSString *fullsubpath = [path stringByAppendingPathComponent:subpath];                        BOOL dir = NO;            [manger fileExistsAtPath:fullsubpath isDirectory:&dir];            if (!dir) { // 子路徑是個檔案                NSDictionary *attrs = [manger attributesOfItemAtPath:fullsubpath error:nil];                totalSize += [attrs[NSFileSize] intValue];            }        }        return totalSize / (1024 * 1024.0);    } else { // 檔案        NSDictionary *attrs = [manger attributesOfItemAtPath:path error:nil];        return [attrs[NSFileSize] intValue] / (1024.0 * 1024.0);    }}#pragma mark - 得到指定目錄下的所有檔案+ (NSArray *)getAllFileNames:(NSString *)dirPath{    NSArray *files = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:dirPath error:nil];    return files;}#pragma mark - 刪除指定目錄或檔案+ (BOOL)clearCachesWithFilePath:(NSString *)path{    NSFileManager *mgr = [NSFileManager defaultManager];    return [mgr removeItemAtPath:path error:nil];}#pragma mark - 清空指定目錄下檔案+ (BOOL)clearCachesFromDirectoryPath:(NSString *)dirPath{        //獲得全部檔案數組    NSArray *fileAry =  [JRCleanCaches getAllFileNames:dirPath];    //遍曆數組    BOOL flag = NO;    for (NSString *fileName in fileAry) {        NSString *filePath = [dirPath stringByAppendingPathComponent:fileName];        flag = [JRCleanCaches clearCachesWithFilePath:filePath];                if (!flag)            break;    }        return flag;}@end

 

作者:傑瑞教育
出處:http://www.cnblogs.com/jerehedu/ 
著作權聲明:本文著作權歸煙台傑瑞教育科技有限公司和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。
技術諮詢: 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.