Sandbox的一些相關(guān)內(nèi)容

域(Domain)

user defaults 數(shù)據(jù)庫中其實是由多個層級的域組成的,當你讀取一個鍵值的數(shù)據(jù)時,NSUserDefaults從上到下透過域的層級尋找正確的值显蝌,不同的域有不同的功能沾谓,有些域是可持久的,有些域則不行墨闲。

  • NSArgumentDomain (參數(shù)域): 有最高的優(yōu)先權(quán),在這里設(shè)置的參數(shù)可以覆蓋其他地方設(shè)置的參數(shù).
  • ApplicationDomain (應(yīng)用域):最重要的域,它存儲著你app通過NSUserDataults set...forKey添加的設(shè)置.
  • NSGlobalDomain (全局域) :存儲著系統(tǒng)的設(shè)置
  • Languages - Specific Domain (語言域): 包括地區(qū)、日期等
  • NSRegistrationDomain (參數(shù)域) : 僅有較低的優(yōu)先權(quán)郑口,只有在應(yīng)用域沒有找到值時才從注冊域去尋找鸳碧。

注:這些域的優(yōu)先級順序是從上到下.

iOS Sandbox

對于一個iOS 程序來說,系統(tǒng)給它提供一個容器,用來存儲自己的信息.
每個ios應(yīng)用都有自己的應(yīng)用沙盒,應(yīng)用沙盒就是文件系統(tǒng)目錄犬性,與其他應(yīng)用放入文件 系統(tǒng)隔離瞻离,ios系統(tǒng)不允許訪問其他應(yīng)用的應(yīng)用沙盒.(也有例外,比如在用戶授權(quán)情況下訪問通訊錄乒裆,相冊等)

沙盒目錄結(jié)構(gòu)

沙盒結(jié)構(gòu)
  • App Bundle: 包含所有資源文件和可執(zhí)行文件

  • Documents: 保存應(yīng)用運行時生成的需要持久化的數(shù)據(jù)套利,iTunes會自動備份該目錄

  • tmp: 保存應(yīng)用運行時所需的臨時數(shù)據(jù),使用完畢后再將相應(yīng)的文件從該目錄刪除鹤耍,應(yīng)用沒有運行時肉迫,系統(tǒng)也可能會自動清理該目錄下的文件,iTunes不會同步該目錄稿黄,iPhone重啟時該目錄下的文件會丟失喊衫。

  • Libaray: 存儲程序的默認設(shè)置和其他狀態(tài)信息,iTunes會自動備份該目錄杆怕。

  • Libaray/Caches:存放緩存文件族购,iTunes不會備份此目錄,此目錄下文件不會在應(yīng)用退出刪除陵珍,一般存放體積比較大寝杖,不是很重要的資源

  • Libaray/Preferences:保存應(yīng)用的所有偏好設(shè)置,ios的Settings(設(shè)置)應(yīng)用會在該目錄中查找應(yīng)用的設(shè)置信息互纯,iTunes會自動備份該目錄瑟幕。

怎樣獲取文件路徑

iOS設(shè)備中每個文件都有路徑,這指的是文件在文件系統(tǒng)中的準確位置.要讓應(yīng)用程序能夠讀寫器沙盒中的文件,需要指定該文件的完整路徑.

Core Foundation提供了一個名為NSSearchDirectoriesInDomains的C語言函數(shù),他返回指向應(yīng)用程序的目錄Documents或Library/Caches的路徑.該函數(shù)可以返回多個目錄,因此該函數(shù)的返回結(jié)果是一個NSArray對象.使用該函數(shù)來訪問指定目錄Documents或Library/Caches的路徑時,它返回的數(shù)組將只包含一個NSString.

// 獲取沙盒主目錄路徑
 NSString *homeDir = NSHomeDirectory();
 // 獲取Documents目錄路徑 
  NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) firstObject];
 // 獲取Library的目錄路徑
  NSString *libDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) firstObject];
 // 獲取Caches目錄路徑
  NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
  // 獲取tmp目錄路徑
   NSString *tmpDir = NSTemporaryDirectory();

讀寫數(shù)據(jù)

NSFileManager是一個單列類,也是一個文件管理器伟姐∈账眨可以通過NSFileManager創(chuàng)建文件夾、創(chuàng)建文件愤兵、寫文件鹿霸、讀文件內(nèi)容等等基本功能。

這里有一篇我覺得寫得挺好的: http://www.reibang.com/p/64b673ba551b
就不再啰嗦了

SQLite

想和大家分享一些新手入門寫得SQLite的數(shù)據(jù)庫簡單操作

我在這里使用的是第三方的庫:FMDB.不說廢話直接上代碼
這是一個用FMDB后寫得簡單的數(shù)據(jù)庫操作的類

AddressBookDataBase.h 文件
  #import <FMDB/FMDB.h>

  #import <Foundation/Foundation.h>

  @interface AddressBookDataBase : NSObject
  -(void)openDataBase:(FMDatabase *)DataBase;
  -(FMDatabase *)createdDataBase;
  -(void)closeDataBase:(FMDatabase *)DataBase;
  -(void)insertDatatoDataBase:(FMDatabase *)DataBase nameIs:(NSString *) name  phoneNumberIs: (NSString *) phoneNumber;
  -(void)deleteDataFromDataBase:(FMDatabase *)DataBase nameIs:    (NSString *) name;
  -(void)modificationDataFromDataBase:(FMDatabase *)DataBase nameIs:(NSString *) name phoneNumberIs: (NSString *) phoneNumber originalName:(NSString *)originalName;
  -(void)deleteTableFromDataBase:(FMDatabase *)DataBase table:(NSString *)tableName;

  @end
AddressBookDataBase.m 文件
 #import "AddressBookDataBase.h"

 @implementation AddressBookDataBase
 -(FMDatabase *)createdDataBase{
    //創(chuàng)建打開數(shù)據(jù)庫
     NSString * strPath = [NSHomeDirectory() stringByAppendingString:@"/Documents/AddressList.db"];
     NSLog(@"%@",strPath);
     FMDatabase * db = [FMDatabase databaseWithPath:strPath];
     if (db != nil) {
          NSLog(@"數(shù)據(jù)庫創(chuàng)建成功");
         }
     return db;
   }

 -(void)openDataBase: (FMDatabase *)DataBase{
      BOOL isOpen = [DataBase open];
      if (isOpen) {
      NSLog(@"打開數(shù)據(jù)庫成功");
     }
   }

-(void)closeDataBase: (FMDatabase *)DataBase{
    BOOL isClose = [DataBase close];
    if (isClose) {
        NSLog(@"關(guān)閉數(shù)據(jù)庫成功");
    }
   }

-(void)insertDatatoDataBase:(FMDatabase *)DataBase nameIs:(NSString *) name  phoneNumberIs: (NSString *) phoneNumber {
  NSString * strCreateTable = @"create table if not exists addressList(id integer  primary key autoincrement,name varchar(20),phoneNumber varchar(20));";
//如果執(zhí)行成功  返回YES
  BOOL isCreate = [DataBase executeUpdate:strCreateTable];

  if(isCreate == YES){
    NSLog(@"創(chuàng)建數(shù)據(jù)表成功");
   }

   NSString * strInsert = [NSString stringWithFormat:@"insert into addressList values(NULL,'%@','%@');",name,phoneNumber];
   NSLog(@"%@",strInsert);

  BOOL isOK = [DataBase executeUpdate:strInsert];
  if (isOK == YES) {
      NSLog(@"插入數(shù)據(jù)成功");
  }

 }

-(void)deleteDataFromDataBase:(FMDatabase *)DataBase nameIs:(NSString *) name{
  NSString * strDelete = [NSString stringWithFormat:@"delete from addressList where name = '%@'",name];
  NSLog(@"%@",strDelete);
  BOOL isOK = [DataBase executeUpdate:strDelete];
  if(isOK == YES){
    NSLog(@"刪除成功");
  }

}
-(void)modificationDataFromDataBase:(FMDatabase *)DataBase nameIs:(NSString *) name phoneNumberIs: (NSString *) phoneNumber originalName:(NSString *)originalName{

  NSString* strModification = [NSString stringWithFormat:@"update addressList set phoneNumber = '%@', name = '%@' where name = '%@';",phoneNumber,name,originalName];
  NSLog(@"%@",strModification);

  BOOL isOk = [DataBase executeUpdate:strModification];
  if(isOk ==YES){
      NSLog(@"修改表成功!");
  }
}

-(void)deleteTableFromDataBase:(FMDatabase *)DataBase table:(NSString *)tableName{
   NSString* strDeleteTable = [NSString stringWithFormat:@"drop table %@",tableName];
   BOOL isOk = [DataBase executeUpdate:strDeleteTable];
   if(isOk ==YES){
    NSLog(@"刪除表成功!");
    }
  }

 @end

關(guān)于sqlite的一些語法的問題,這里給大家推薦一個網(wǎng)站
http://www.runoob.com/sqlite/sqlite-update.html.
里面關(guān)于SQLite的語句有詳細的語法講解,希望可以幫到大家.

總結(jié)

關(guān)于Domain的操作 實際上就是簡單的數(shù)據(jù)存儲操作.有時候人家說Domain 你可能不知道是什么意思.查查字典,Google 會知道的.而Domain又分了很多個Domain.所以很容易就弄混了.你需要知道這些Domain之間的區(qū)別.

關(guān)于NSSearchDirectoriesInDomains該函數(shù)的返回值是一個NSString的數(shù)組.
這個函數(shù)有個domainMask,這里只舉出NSUserDomainMask.的情況.如果這里的參數(shù)寫的是這個NSUserDomainMask.但是該數(shù)組將只有一個NSString對象.返回的就是你在NSHomeDirectory下查找Documents/Library文件夾的路徑.所以使用的時候直接用下標訪問就可以了.其他的請查閱NSSearchDirectoriesInDomainsAPI的說明

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秆乳,一起剝皮案震驚了整個濱河市懦鼠,隨后出現(xiàn)的幾起案子钻哩,更是在濱河造成了極大的恐慌,老刑警劉巖肛冶,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件街氢,死亡現(xiàn)場離奇詭異,居然都是意外死亡睦袖,警方通過查閱死者的電腦和手機珊肃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馅笙,“玉大人伦乔,你說我怎么就攤上這事《埃” “怎么了烈和?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長皿淋。 經(jīng)常有香客問我招刹,道長,這世上最難降的妖魔是什么窝趣? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任疯暑,我火速辦了婚禮,結(jié)果婚禮上哑舒,老公的妹妹穿的比我還像新娘缰儿。我一直安慰自己,他們只是感情好散址,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宣赔,像睡著了一般预麸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上儒将,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天吏祸,我揣著相機與錄音,去河邊找鬼钩蚊。 笑死贡翘,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的砰逻。 我是一名探鬼主播鸣驱,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蝠咆!你這毒婦竟也來了踊东?” 一聲冷哼從身側(cè)響起北滥,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎闸翅,沒想到半個月后再芋,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡坚冀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年济赎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片记某。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡司训,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出辙纬,到底是詐尸還是另有隱情豁遭,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布贺拣,位于F島的核電站蓖谢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏譬涡。R本人自食惡果不足惜闪幽,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望涡匀。 院中可真熱鬧盯腌,春花似錦、人聲如沸陨瘩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舌劳。三九已至帚湘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甚淡,已是汗流浹背大诸。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贯卦,地道東北人资柔。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像撵割,于是被迫代替她去往敵國和親贿堰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

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