iOS開發(fā)--數(shù)據(jù)持久化

這是我個(gè)人的學(xué)習(xí)筆記 , 如有不同見解歡迎評論交流 .
( 我的微博 : http://weibo.com/JohnnyB0Y )

  • 沙盒機(jī)制

1.每個(gè)應(yīng)用都有自己的沙盒,不能越界讀寫其他應(yīng)用的數(shù)據(jù)忙干。
2.獲取Documents文件夾路徑
NSArray *pathsList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES);
NSString *documentPath = [pathsList lastObject];
3.獲取Library文件夾路徑
NSArray *pathsList = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,
NSUserDomainMask,
YES);
NSString *libraryPath = [pathsList lastObject];
4.獲取tmp文件夾路徑
NSString *tmpPath = NSTemporaryDirectory();

沙盒文件夾 使用場景
Documents iTunes會同步睡雇,存放重要的數(shù)據(jù),希望同步到其他設(shè)備的數(shù)據(jù)。
Library iTunes不會同步,設(shè)置程序的默認(rèn)設(shè)置和其他狀態(tài)信息。
Library/Caches 緩存文件夾英上,保存可以從網(wǎng)絡(luò)上重復(fù)獲取的資源(節(jié)省流量)。
Library/Preferences 保存一些用戶信息配置文件啤覆,LaunchScreen生成的啟動圖片苍日。
tmp 創(chuàng)建臨時(shí)文件的目錄,當(dāng)iOS設(shè)備重啟時(shí)窗声,文件會被自動清除相恃。
  • NSFileManager

1.創(chuàng)建一個(gè)文件并寫入數(shù)據(jù)
- (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr;
2.從一個(gè)文件中讀取數(shù)據(jù)
- (NSData *)contentsAtPath:(NSString *)path;
3.scrPath路徑上的文件移動到dstPath路徑上,注意這里的路徑是文件路徑而不是目錄
- (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **) error;
4.scrPath路徑上的文件復(fù)制到dstPath路徑上
- (BOOL)copyItemAtPath:(NSString *)scrPath toPath:(NSString *)dstPath error:(NSError **) error;
5.比較兩個(gè)文件的內(nèi)容是否一樣
- (BOOL)contentsEqualAtPath:(NSString *)path1 andPath:(NSString *)path2;
6.文件是否存在
- (BOOL)fileExistsAtPath:(NSString *)path;
7.移除文件
- (BOOL)removeItemAtPath:(NSString *)path error:(NSError **) error;
8.創(chuàng)建文件管理
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *path = [NSHomeDirectory( ) stringByAppendingPathComponent:@"holyBible.txt"];
NSString *text = @"abcdefg";
9.將字符串轉(zhuǎn)成NSData類型
NSData *data = [text dataUsingEncoding: NSUTF8StringEncoding];
10.寫入文件
BOOL success = [fileManager createFileAtPath:path contents:data attributes:nil];
11.創(chuàng)建文件夾
NSString *filePath = [path stringByAppendingPathComponent:@"holyBible.txt"];
NSString *contect = @"abcdefg”;
BOOL success = [fm createFileAtPath:filePath contents:[content dataUsingEncoding: NSUTF8StringEncoding] attributes:nil];
12.NSFileManager-讀取內(nèi)容
NSData *fileData = [fileManager contentsAtPath:filePath];
NSString *content = [[NSString alloc] initWithData:fileData dataUsingEncoding: NSUTF8StringEncoding];
13.NSData-讀取內(nèi)容
NSString *filePath = [path stringByAppendingPathComponent:@"holyBible.txt"];
NSData *data = [NSData dataWithContentOfFile:filePath];
13.1 NSString-讀取內(nèi)容
NSString *filePath = [path stringByAppendingPathComponent:@"holyBible.txt"];
NSString *content = [[NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
移動笨觅、復(fù)制文件
14.移動文件(重命名)
NSString *toPath = [NSHomeDirectory( ) stringByAppendingPathComponent:@"hellogod/New Testament.txt"];
[fm createDirectoryAtPath:[toPath stringByDeletingLastPathComponent] withIntermediateDirectories:YES attributes:nil error:nil];
NSError *error;
BOOL isSuccess = [fm moveItemAtPath:filePath toPath:toPath error:&error];
15.復(fù)制文件(重命名)
NSString *copyPath = [NSHomeDirectory( ) stringByAppendingPathComponent:@"備份/Old Testament.txt"];
[fm createDirectoryAtPath:[toPath stringByDeletingLastPathComponent] withIntermediateDirectories:YES attributes:nil error:nil];
BOOL success = [fm copyItemAtPath:toPath toPath:toPath error:nil];
刪除文件拦耐、獲取文件大小
16.判斷文件是否存在和刪除文件
if([fm fileExistsAtPath])
{
if ([fm removeItemAtPath:copyPath])
{
NSLog(@"remove success");
}
}
17.獲得文件的屬性字典
NSFileManager *fileManager = [NSFileManager defaultManager];
NSDictionary *attrDic = [fileManager attributesOfItemAtpath:sourcePath error:nil];
18.獲取文件大小
NSNumber *fileSize = [attrDic objectForKey:NSFileSize];
19.獲取目錄文件信息
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *enuPath = [NSHomeDirectoty( ) stringByAppendingPathComponent:@"Test"];
NSDictionaryEnumerator *dirEnum = [fileManager enumeratorAtPath:enuPath];
NSString *path = nil;
while ((path = [dirEnum nextObject]} != nil){
NSLog(@"%@",path);

  • Plist耕腾、Archive數(shù)據(jù)歸檔

#######Plist就是數(shù)組、字典(xml的組織形式)直接寫到沙盒中杀糯。
字典:[dictionary writeToFile:寫入文件的路徑 atomically:是否原子寫入];
數(shù)組:[array writeToFile:寫入文件的路徑 atomically:是否原子寫入];
#######Archive歸檔解檔扫俺。
1.要?dú)w檔的類需要實(shí)現(xiàn)<NSCoding>協(xié)議
1.1 解檔屬性:重寫
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
self.requestData = [aDecoder decodeObjectForKey:@"requestData"];
}
return self;
}

  1.2 歸檔屬性:重寫
  - (void)encodeWithCoder:(NSCoder *)aCoder
  {
      [aCoder encodeObject:_requestData forKey:@"requestData"];
  }

2.對類完整歸檔解檔
NSString *objKey = @"objKey";
NSString *savePath = [NSString stringWithFormat:@"%@/save.data", NSTemporaryDirectory()];
// 1 歸檔
NSMutableData *dataM = [NSMutableData data];
NSKeyedArchiver *keyedArchiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:dataM];
[keyedArchiver encodeObject:@"對象" forKey:objKey];
[keyedArchiver finishEncoding];
// 歸檔后把dataM保存到沙盒
[dataM writeToFile:savePath atomically:YES];

  // 2 解檔
  // 從沙盒讀取data
  NSData *data = [[NSData alloc] initWithContentsOfFile:savePath];
  // 開始解檔
  NSKeyedUnarchiver *keyedUnarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
  NSString *string = [keyedUnarchiver decodeObjectForKey:objKey];
  [keyedUnarchiver finishDecoding];
  • NSUserDefaults

1.屬于簡化版的Archive歸解檔
NSString *objKey = @"objKey";
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
// 保存數(shù)據(jù)(其中有很多類型的數(shù)據(jù))
[userDefaults setObject:@"對象" forKey:objKey];
// 讀取數(shù)據(jù)
[userDefaults objectForKey:objKey];

  • SQLite3應(yīng)用

iOS開發(fā)--SQLite數(shù)據(jù)庫

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市固翰,隨后出現(xiàn)的幾起案子狼纬,更是在濱河造成了極大的恐慌,老刑警劉巖倦挂,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畸颅,死亡現(xiàn)場離奇詭異,居然都是意外死亡方援,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門涛癌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來犯戏,“玉大人,你說我怎么就攤上這事拳话∠确耍” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵弃衍,是天一觀的道長呀非。 經(jīng)常有香客問我,道長镜盯,這世上最難降的妖魔是什么岸裙? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮速缆,結(jié)果婚禮上降允,老公的妹妹穿的比我還像新娘。我一直安慰自己艺糜,他們只是感情好剧董,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著破停,像睡著了一般翅楼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上真慢,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天毅臊,我揣著相機(jī)與錄音,去河邊找鬼晤碘。 笑死褂微,一個(gè)胖子當(dāng)著我的面吹牛功蜓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宠蚂,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼式撼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了求厕?” 一聲冷哼從身側(cè)響起著隆,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎呀癣,沒想到半個(gè)月后美浦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡项栏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年浦辨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沼沈。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡流酬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出列另,到底是詐尸還是另有隱情芽腾,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布页衙,位于F島的核電站摊滔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏店乐。R本人自食惡果不足惜艰躺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望响巢。 院中可真熱鬧描滔,春花似錦、人聲如沸踪古。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伏穆。三九已至拘泞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間枕扫,已是汗流浹背陪腌。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人诗鸭。 一個(gè)月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓染簇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親强岸。 傳聞我的和親對象是個(gè)殘疾皇子锻弓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 一、iOS中的沙盒機(jī)制 iOS應(yīng)用程序只能對自己創(chuàng)建的文件系統(tǒng)讀取文件蝌箍,這個(gè)獨(dú)立青灼、封閉、安全的空間妓盲,叫做沙盒杂拨。它一...
    1d5cb7cff98d閱讀 1,770評論 0 0
  • 一、iOS中的沙盒機(jī)制 iOS應(yīng)用程序只能對自己創(chuàng)建的文件系統(tǒng)讀取文件悯衬,這個(gè)獨(dú)立弹沽、封閉、安全的空間甚亭,叫做沙盒贷币。它一...
    tzhtodd閱讀 1,280評論 0 2
  • 一、iOS中的沙盒機(jī)制 iOS應(yīng)用程序只能對自己創(chuàng)建的文件系統(tǒng)讀取文件亏狰,這個(gè)獨(dú)立、封閉偶摔、安全的空間暇唾,叫做沙盒。它一...
    絢雨藍(lán)了個(gè)楓閱讀 4,096評論 0 2
  • 27辰斋、ViewController的didReceiveMemoryWarning是在什么時(shí)候調(diào)用的策州?默認(rèn)的操作是...
    煙雨平生花飛舞閱讀 575評論 0 1
  • iOS開發(fā)-文件管理(一) 一、iOS中的沙盒機(jī)制 iOS應(yīng)用程序只能對自己創(chuàng)建的文件系統(tǒng)讀取文件宫仗,這個(gè)獨(dú)立够挂、封閉...
    MacShare閱讀 1,800評論 0 6