IOS 沙箱機制 淺析

來源:互聯網
上載者:User

標籤:目錄   tle   mda   alt   設定   程式   settings   key   檔案的   

IOS中的沙箱機制(SandBox)是一種安全體系,它規定了應用程式只能在為該應用建立的檔案夾內讀取檔案,不可以訪問其他地方的內容。所有的非代碼檔案都儲存在這個地方,比片、聲音、屬性列表和文字檔等。

1.每個應用程式都在自己的沙箱內(提示:在IOS8中已經開放訪問)

2.不能隨意跨越自己的沙箱去訪問別的應用程式沙箱的內容

3.應用程式向外請求或接收資料都需要經過許可權認證

//擷取home目錄    NSString *homePath = NSHomeDirectory();    NSLog(@"home%@",homePath);       //擷取documents目錄    //方式1:    NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);    NSString *documentsPath = [documents lastObject];    NSLog(@"%@",documentsPath);    //方式2:拼接字串    NSString *documentPath2 = [homePath stringByAppendingPathComponent:@"Documents"];    NSLog(@"documenPath2:%@",documentPath2);       //擷取caches緩衝目錄    NSArray *caches = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);    NSString *cachesPath = [caches lastObject];    NSLog(@"cachesPath:%@",cachesPath);       //擷取臨時目錄    NSString *tmp = NSTemporaryDirectory();    NSLog(@"tmp:%@",tmp);       //在documents目錄下建立檔案    NSFileManager *fm = [NSFileManager defaultManager];    NSString *fileName = [documentsPath stringByAppendingPathComponent:@"1.txt"];    NSString *str = @"hello world";    NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];       if ([fm createFileAtPath:fileName contents:data attributes:nil]) {        NSLog(@"file create successful");    }       //讀出檔案的內容    NSError *error = nil;       NSString *str2 = [NSString stringWithContentsOfFile:fileName encoding:NSUTF8StringEncoding error:&error];    if (!error) {        NSLog(@"str2:%@",str2);    }    else    {        NSLog(@"%@",error);    }    //NSBundle對象:圖片、xib、storyBoard、plist檔案都是放在應用程式套件組合中    NSBundle *bundle = [NSBundle mainBundle];    //擷取包中檔案的路徑;    NSString *path = [bundle pathForResource:@"array" ofType:@"plist"];    //載入包中的xib檔案    NSArray *views  = [bundle loadNibNamed:@"cell" owner:self options:nil];

 

使用者喜好設定練習:
NSUserDefaults *userDeafults = [NSUserDefaults standardUserDefaults];       [userDeafults setObject:@"admin" forKey:@"userName"];    [userDeafults setObject:[NSDate date] forKey:@"loginDate"];    [userDeafults setInteger:2 forKey:@"loginTimes"];       //將喜好設定寫到檔案中去    [userDeafults synchronize];//同步方法       //擷取home目錄    NSString *homePath = NSHomeDirectory();    NSLog(@"%@",homePath);  NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];    NSString *userName = [userDefaults objectForKey:@"userName"];    NSDate *loginDate = [userDefaults objectForKey:@"loginDate"];    NSString *loginTimes = [userDefaults objectForKey:@"loginTimes"];    NSLog(@"%@,%@",userName,loginTimes);    NSDateFormatter *df = [[NSDateFormatter alloc]init];    df.dateFormat = @"MM-dd HH-mm-ss";    NSLog(@"loginDate:%@",[df stringFromDate:loginDate]);

 

注意:UserDefaults設定資料時,不是立即寫入,而是根據時間戳記定時地把緩衝中的資料寫入本地磁碟。所以調用了set方法之後資料有可能還沒有寫入磁碟,應用程式就終止了。出現以上問題,可以通過調用synchornize方法強制寫入:[defaults synchronize];

三、應用沙箱結構分析

應?程式包:(中的Layer)包含了所有的資源檔和可執行檔 

Documents:儲存應?運行時產生的需要持久化的資料,iTunes同步裝置時會備份該目錄。例如,遊戲應用可將遊戲存檔儲存在該目錄

tmp:儲存應?運行時所需的臨時資料,使?完畢後再將相應的檔案從該目錄刪除。應用沒有運行時,系統也可能會清除該目錄下的檔案。iTunes同步裝置時 不會備份該目錄 

Library/Caches:儲存應用運行時?成的需要持久化的資料,iTunes同步裝置時不會備份該目錄。?一般儲存體積大、不需要備份的非重要資料 

Library/Preference:儲存應用的所有喜好設定,iOS的Settings(設定) 應?會在該?錄中尋找應?的設定資訊。iTunes同步裝置時會備份該目錄*參考了別人的請見諒(都是知識點,偷了一下懶)*

IOS 沙箱機制 淺析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.