沙盒

沙盒

#import "RootViewController.h"

@interface RootViewController ()

@end

@implementation RootViewController

// 數據持久化

// 一些不可再生的數據可以進行數據持久化,說白了就是放進APP的文件中,而可再生的數據,是放在內存中的;可以被適當

// 沙盒(SandBox),他的本質是一個文件夾,叫沙盒的原因是因為它符合一種安全機制


- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor purpleColor];
   
    // 沙盒路徑 : 每次安裝應用程序,都會產生一個沙盒,沙盒的路徑非常深,并且經過了隨機加密
   
    // 沙盒的使用,導致APP都是自身管理自身,在沒有權限或者許可的情況下,兩個不同的APP不可以互相訪問
   
    // 1.
//    NSString *userName = NSUserName();
//    NSString *sandBoxPath = NSHomeDirectoryForUser(userName);
//    
//    NSLog(@"%@",sandBoxPath);
   
    // 2.
    NSString *sandBoxPath = NSHomeDirectory();
    NSLog(@"%@",sandBoxPath);
    // 沙盒文件
 /*
    // 沙盒中有三個文件夾
       // 1. Document    存儲用戶數據,需要備份的信息 (一般是那些被數據持久化的數據)
       // 會被iTunes同步
    NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
    NSLog(@"%@",documentPath);
   
        // 2. Library/Caches 存儲緩存文件 (一般是一些圖片和視頻的緩存)
        // 不會被iTunes不會被同步
    NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
    NSLog(@"%@",cachesPath);
   
        // 3. Library/Preferences 存儲應用程序的偏好設置文件
        // 會被iTunes同步
    NSString *preferencesPath = NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory, NSUserDomainMask, NO)[0];
       // 如果把參數改成NO 沙盒路徑前面會省略用波浪線代替
    NSLog(@"%@",preferencesPath);
   
       // 4. tmp 臨時文件夾,放臨時文件,退出APP的時候,里面文件被清除
       // 不會被iTunes同步
    NSString *tempPath = NSTemporaryDirectory();
    NSLog(@"%@",tempPath);
   
        // 5. iOS8之前,沙盒還有一個.app的文件夾
    NSString *appPath = [[NSBundle mainBundle] bundlePath];
    NSLog(@"%@",appPath);
   
  */

簡單對象寫入文件

    /*
    NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
   
    NSString *filePath  = [NSString stringWithFormat:@"%@/張三的戰(zhàn)書.txt",documentPath];
    NSString *loveContent = @"iLoveU";
    // 將內容寫入文件
    [loveContent writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
//    NSLog(@"%@",filePath);
    NSString *filePath2 =  [documentPath stringByAppendingString:@"/myVideo.avi"];
    NSString *aviContent = @"愛情動作片";
    [aviContent writeToFile:filePath2 atomically:YES encoding:NSUTF8StringEncoding error:nil];
   NSLog(@"%@",filePath2);

    // 新建一個文件
   
    // 寫入一個簡單對象 NSArray NSDictionAry
    NSArray *arr = [NSArray arrayWithObjects:@"da",@"fag",@"afgthfd", nil];
    [arr writeToFile:filePath atomically:YES];
    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"1",@"a",@"2",@"b",@"3",@"c", nil];
    [dict writeToFile:filePath atomically:YES];
   
    NSLog(@"%@",filePath);
   
    // 讀取文件中的內容
    */
   

NSFileManager 文件管理者

 //1. 新建文件夾 2. 可以創(chuàng)建 移動 復制 刪除文件   3.判斷文件是否存在

 NSFileManager *manager = [NSFileManager defaultManager];

 // 1. 新建文件夾
 [manager createDirectoryAtPath:[sandBoxPath stringByAppendingString:@"/我的"]withIntermediateDirectories:YES attributes:nil error:nil];
 NSLog(@"%@",sandBoxPath);

 // 刪除
// [manager removeItemAtPath:[sandBoxPath stringByAppendingString:@"/我的"] error:nil];

 // 移動
//  [manager moveItemAtPath: toPath: error:;]

 // 復制
//   [manager copyItemAtPath: toPath: error:];

 // 判斷是否存在
//    - (BOOL)fileExistsAtPath:(NSString *)path;
//    - (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory;
//    - (BOOL)isReadableFileAtPath:(NSString *)path;
//    - (BOOL)isWritableFileAtPath:(NSString *)path;
//    - (BOOL)isExecutableFileAtPath:(NSString *)path;
//    - (BOOL)isDeletableFileAtPath:(NSString *)path;

}

復雜對象寫入沙盒

#import <Foundation/Foundation.h>

// 1. 遵循協(xié)議
@interface Person : NSObject<NSCoding>

@property (nonatomic,strong)NSString *name;
@property(nonatomic,strong)NSString *gender;


@end


#import "Person.h"

@implementation Person

// 實現NSCoding的編碼和反編碼方法

// 編碼方式
- (void)encodeWithCoder:(NSCoder *)aCoder{
    // 把model類里面的屬性進行編碼
    [aCoder encodeObject:self.name  forKey:@"p_name"];
    [aCoder encodeObject:self.gender forKey:@"p_gender"];
}

// 反編碼方法
- (id)initWithCoder:(NSCoder *)aDecoder{
    if (self = [super init]) {
        // 反編碼的時候的時候要找返回值接受
   self.name = [aDecoder decodeObjectForKey:@"p_name"];
    self.gender =  [aDecoder decodeObjectForKey:@"p_gender"];
    };
    return self;
}

@end



#import "RootViewController.h"
#import "Person.h"

@interface RootViewController ()

@end

@implementation RootViewController

- (void)viewDidLoad {
    [super viewDidLoad];
   
// document路徑
    NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,  YES)[0];
    NSString *filePath = [documentPath stringByAppendingString:@"/小明.txt"];
//    NSString *tmpStr = @"我愛臺妹";
//    
//    [tmpStr writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
//    
    Person *p1 = [[Person alloc]init];
   
    // 由于p1是復雜對象,沒有辦法直接寫入文件
   
    // 簡單對象可以直接寫入對象的原因是因為NSString,NSArray,NSdictionary,NSNumber  這些對象他們遵循了NSCoding 協(xié)議
   
    p1.name  = @"張三";
    p1.gender = @"男";
   
    NSMutableData *data1 = [NSMutableData data];
   
    // 歸檔工具
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data1];
   
    [archiver encodeObject:p1 forKey:@"person"];
    [archiver finishEncoding];
   
    [data1 writeToFile:filePath atomically:YES];
    NSLog(@"%@",filePath);
   
    // 讀取 (反歸檔)
    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data1];
    Person *p2 =  [unarchiver decodeObjectForKey:@"person"];
    NSLog(@"name:%@ gender:%@",p2.name,p2.gender);
    [unarchiver finishDecoding];
 
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末检号,一起剝皮案震驚了整個濱河市微峰,隨后出現的幾起案子铅辞,更是在濱河造成了極大的恐慌,老刑警劉巖宫静,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異避咆,居然都是意外死亡滋饲,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門躲雅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鼎姊,“玉大人,你說我怎么就攤上這事相赁∠嗫埽” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵钮科,是天一觀的道長唤衫。 經常有香客問我,道長绵脯,這世上最難降的妖魔是什么战授? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮桨嫁,結果婚禮上,老公的妹妹穿的比我還像新娘份帐。我一直安慰自己璃吧,他們只是感情好,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布废境。 她就那樣靜靜地躺著畜挨,像睡著了一般筒繁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上巴元,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天毡咏,我揣著相機與錄音,去河邊找鬼逮刨。 笑死呕缭,一個胖子當著我的面吹牛,可吹牛的內容都是我干的修己。 我是一名探鬼主播恢总,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼睬愤!你這毒婦竟也來了片仿?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤尤辱,失蹤者是張志新(化名)和其女友劉穎砂豌,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體光督,經...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡阳距,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了可帽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娄涩。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖映跟,靈堂內的尸體忽然破棺而出蓄拣,到底是詐尸還是另有隱情,我是刑警寧澤努隙,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布球恤,位于F島的核電站,受9級特大地震影響荸镊,放射性物質發(fā)生泄漏咽斧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一躬存、第九天 我趴在偏房一處隱蔽的房頂上張望张惹。 院中可真熱鬧,春花似錦岭洲、人聲如沸宛逗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雷激。三九已至替蔬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間屎暇,已是汗流浹背承桥。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留根悼,地道東北人凶异。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像番挺,于是被迫代替她去往敵國和親唠帝。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內容