4種數(shù)據(jù)持久存儲(chǔ)到iOS文件系統(tǒng)的機(jī)制:
1.屬性列表距误;
2.對(duì)象歸檔碍脏;
3.iOS的嵌入式關(guān)系數(shù)據(jù)庫(kù)(SQLite3)帅霜;
4.蘋果公司提供的持久化工具Core Data奸攻。
應(yīng)用程序的沙盒
蘋果采用的是沙盒機(jī)制蒜危,一般沙盒中都會(huì)有三個(gè)文件夾,它們都有各自的作用睹耐。
1.Documents:應(yīng)用程序?qū)?shù)據(jù)存儲(chǔ)在Documents中辐赞,但基于NSUserDefaults的首選項(xiàng)設(shè)置除外。
2.Library:基于NSUserDefaults的首選項(xiàng)設(shè)置存儲(chǔ)在Library/Preferences文件夾中硝训。
3.tmp:tmp目錄供應(yīng)用程序存儲(chǔ)臨時(shí)文件响委。當(dāng)iOS設(shè)備執(zhí)行同步時(shí),iTunes不會(huì)備份tmp中的文件窖梁,但在不需要這些文件時(shí)赘风,應(yīng)用程序要負(fù)責(zé)刪除tmp中的文件,以免占用文件系統(tǒng)的空間纵刘。
*下面是檢索Documents目路徑的一些代碼:
objective-c //常量NSDocumentDirectory表明我們正在查找Documents目錄的路徑邀窃;第二個(gè)常量NSUserDomainMask表明我們希望將搜索限制在應(yīng)用程序的沙盒內(nèi)。 NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
*獲取tmp目錄
objective-c NSString *tmpPath = NSTemporaryDirectory();
屬性列表
序列化對(duì)象:是指可以被轉(zhuǎn)換為字節(jié)以便于存儲(chǔ)到文件中或通過網(wǎng)絡(luò)進(jìn)行傳輸?shù)膶?duì)象彰导。
可以通過writeToFile: atomically:(atomically參數(shù)讓該方法將數(shù)據(jù)寫入輔助文件蛔翅,而不是寫入到指定位置;成功寫入該文件之后位谋,輔助文件將被復(fù)制到第一個(gè)參數(shù)指定的位置)方法將他們存儲(chǔ)到屬性鏈表山析;可以序列化的對(duì)象NSArray;NSMutableArray;NSDictionary;NSMutableDictionary;NSData;NSMutableData;NSString;NSMutableString;NSNumber;無法使用其他的類掏父,包括自定義的類笋轨。
**下面是例子
//BIDViewController.h中的代碼
#import <UIKit/UIKit.h>
@interface BIDViewController : UIViewController
@property (strong, nonatomic) IBOutletCollection(UITextField) NSArray *lineFields;
@end
#import "BIDViewController.h"
@interface BIDViewController ()
@end
@implementation BIDViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
NSString *filePath = [self dataFilePath];
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath];
[self.lineFields enumerateObjectsUsingBlock:^(UITextField *textFiledObj, NSUInteger idx, BOOL * _Nonnull stop) {
textFiledObj.text = array[idx];
}];
}
UIApplication *app = [UIApplication sharedApplication];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive:) name:UIApplicationWillResignActiveNotification object:app];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)applicationWillResignActive:(NSNotification *)notification {
NSString *filePah = [self dataFilePath];
NSArray *array = [self.lineFields valueForKey:@"text"];
[array writeToFile:filePah atomically:YES];
}
-(NSString *)dataFilePath
{
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
return [path stringByAppendingPathComponent:@"data.plist"];
}
@end