iOS的沙盒機制: 1、iOS的應用程序只能對自己創(chuàng)建的文件系統(tǒng)讀取文件,這個獨立、封閉、安全的空間,叫做沙盒。它一般存放著程序包文件(可執(zhí)行文件)、圖片、音頻、視頻、plist文件、sqlite數據庫以及其他文件; 2、每個應用程序都有自己的獨立的存儲空間(沙盒); 3、一般來說,應用程序之間是不可以互相訪問沙盒的; 4、模擬器的沙盒位置路徑:/User/userName/Library/application Support/iphone Simulator
沙盒的構成:當創(chuàng)建應用程序的時候,在每個沙盒中都含有三個文件,分別是Document、Library和temp。 1、Document:一般需要持久的數據都放在此目錄中,可以在當中添加子文件夾,iTunes備份和恢復的時候,會包括此目錄; 2、Library:設置程序的默認設置和其他的狀態(tài); 3、temp:創(chuàng)建臨時文件的目錄,當iOS設備重啟時,文件會被自動清除。
獲取沙盒的目錄:
.h文件#import <Foundation/Foundation.h>@interface YDWSandBoxPath : NSObject// 獲取沙盒Document文件目錄+ (NSString *)getDocumentDirectory;// 獲取沙河Library文件目錄+ (NSString *)getLibraryDirectory;// 獲取沙盒Library/Caches文件目錄+ (NSString *)getCacheDirectory;// 獲取沙盒PReference文件目錄+ (NSString *)getPreferencePanesDirectory;//獲取沙盒tmp文件目錄+ (NSString *)getTmpDirectory;@end.m文件#import "YDWSandBoxPath.h"@implementation YDWSandBoxPath+ (NSString *)getDocumentDirectory { return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];}+ (NSString *)getLibraryDirectory { return [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];}+ (NSString *)getCacheDirectory { return [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];}+ (NSString *)getPreferencePanesDirectory { return [NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory, NSUserDomainMask, YES) lastObject];}+ (NSString *)getTmpDirectory { return NSTemporaryDirectory();}@end清除緩存:在開發(fā)的過程中,遇到有用的數據,會進行緩存,當該數據不需要時,可以清除。在這里整理了幾個方法,統(tǒng)計問價的大小,清除指定文件,清除指定目錄下的全部文件等。// 根據路徑返回目錄或文件的大小+ (double)sizeWithFilePath:(NSString *)path { // 獲取文件的管理者 NSFileManager *manager = [NSFileManager defaultManager]; // 檢測路徑的合理性 BOOL direct = NO; BOOL exits = [manager fileExistsAtPath:path isDirectory:&direct]; if (!exits) { return 0; } if (direct) { NSArray *subPaths = [manager subpathsAtPath:path]; int totalSize = 0; for (NSString *subPath in subPaths) { NSString *fullSubPath = [path stringByAppendingPathComponent:subPath]; BOOL dir = NO; [manager fileExistsAtPath:path isDirectory:&dir]; if (!dir) { NSDictionary *attrs = [manager attributesOfItemAtPath:fullSubPath error:nil]; totalSize += [attrs[NSFileSize] integerValue]; } } return totalSize/(1024*1024.0); } else { NSDictionary *attrs = [manager attributesOfItemAtPath:path error:nil]; return [attrs[NSFileSize] intValue]/(1024*1024.0); }}// 得到指定目錄下的所有文件+ (NSArray *)getAllFileNames:(NSString *)dirPath { return [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:dirPath error:nil];}// 刪除指定目錄或文件+ (BOOL)clearCacheWithFilePath:(NSString *)path { return [[NSFileManager defaultManager] removeItemAtPath:path error:nil];}// 清空指定目錄下文件+ (BOOL)clearCacheFormDirectoryPath:(NSString *)dirPath { NSArray *fileArray = [YDWSandBoxPath getAllFileNames:dirPath]; BOOL flag = NO; for (NSString *fileName in fileArray) { NSString *filePath = [dirPath stringByAppendingPathComponent:fileName]; flag = [YDWSandBoxPath clearCacheWithFilePath:filePath]; if (!flag) { break; } } return flag;}NSData的用法: 1、NSString與NSData互相轉換 NSData –> NSString為:NSString *dataString = [[NSString alloc] initWithData:[NSData data] encoding:NSUTF8StringEncoding];
NSString –> NSData為:NSData *stringData = [[NSString string] dataUsingEncoding:NSUTF8StringEncoding];
將data類型的數據,轉成UTF8的數據:
+ (NSString*)dataToUTF8String:(NSData *)data { return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];}將string轉換為指定編碼 :
+ (NSString *)changeDataToEncodinString:(NSData *)data encodin:(NSStringEncoding )encoding { return [[NSString alloc] initWithData:data encoding:encoding];}2、NSData 與 UIImage NSDat –> UIImage為:UIImage *image = [UIImage imageWithData: imageData]; 例如:
- (NSData *)changePictureToNSData { NSString *filePath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:[NSString stringWithFormat:@"ceshi.png"]]; NSData *imageData = [NSData dataWithContentsOfFile:filePath]; return imageData;}數組、字典只能將BOOL、NSNumber、NSString、NSData、NSDate、NSArray、NSDictionary寫入屬性列表plist文件.
String方式添加 NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"xxx.plist"]; [[NSString string] writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];Array方式添加 NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"xxx.plist"]; [[NSArray array] writeToFile:path atomically:YES];Dictionary方式添加NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"xxx.plist"]; [[NSDictionary dictionary] writeToFile:path atomically:YES];新聞熱點
疑難解答