iOS小記--NSFileProtectionKey

iPhone鎖屏狀態(tài)會(huì)對文件的讀寫產(chǎn)生影響,導(dǎo)致一些在后臺模式下的操作并不能達(dá)到想要的結(jié)果。

在NSFileManager類中這樣一些方法,

- createFileAtPath:contents:attributes:

- createDirectoryAtPath:withIntermediateDirectories:attributes:error:

– setAttributes:ofItemAtPath:error:

- attributesOfItemAtPath:error:

相同的是這里都提到了一個(gè)名詞attributes。文檔介紹,這是一些關(guān)于文件的屬性,用一個(gè)字典包括,每一個(gè)key都被定義好的。文檔中搜索File Attribute Keys,可以輕松找到。這里只就其中一個(gè)在鎖屏狀態(tài)下造成影響的屬性作出一些介紹:NSString* const NSFileProtectionKey;

這個(gè)擴(kuò)展屬性標(biāo)示著文件的保護(hù)等級,相對應(yīng)的值也是NSString類型的。在File Protection Values.中列了出來。下面來一個(gè)個(gè)看。

extern NSString* const NSFileProtectionNone;

extern NSString* const NSFileProtectionComplete;

extern NSString* const NSFileProtectionCompleteUnlessOpen;

extern NSString* const NSFileProtectionCompleteUntilFirstUserAuthentication;

NSFileProtectionNone:文件沒有設(shè)置任何保護(hù),隨時(shí)可以讀寫。

NSFileProtectionComplete:最完備等級的保護(hù),文件以加密形式寫在磁盤中,當(dāng)設(shè)備(iPhone/iPad)在Locked(鎖屏,還是帶密碼的那種)狀態(tài)或者booting(正在開機(jī))時(shí)無法讀寫。

NSFileProtectionCompleteUnlessOpen:也是加密寫在磁盤中,區(qū)別與上一個(gè)的事,文件在鎖屏狀態(tài)下可以被創(chuàng)建,但是不能關(guān)閉文件,一旦關(guān)了它,在解鎖之前你是不可以做任何操作的。解鎖之后,你可以正常操作文件,即使這個(gè)時(shí)候用戶再次鎖上設(shè)備。雖然沒有被寫入或讀取,這里在創(chuàng)建或打開文件時(shí)也有一點(diǎn)小小的性能損失。更緩和的策略是在設(shè)備未鎖住時(shí)將文件屬性設(shè)為NSFileProtectionComplete。

NSFileProtectionCompleteUntilFirstUserAuthentication:文件以加密形式存儲(chǔ)在磁盤上,未開啟機(jī)器時(shí)是不可以存取的,在用戶第一次解鎖設(shè)備之后(理解為開機(jī)后第一次解鎖),你的app可以使用這個(gè)文件即使用戶鎖屏了也沒關(guān)系。

iOS這么做也是出于一些安全的考慮,但是對于一些在后臺模式下的應(yīng)用,NSFileProtectionComplete保護(hù)級別的文件可能會(huì)造成一些不便,例如寫入數(shù)據(jù)庫失敗(我前面提到過),下載的文件未完成,etc.但是之間改變權(quán)限似乎又有安全隱患(其實(shí)我不是很care...)。比較建議的做法是,創(chuàng)建一個(gè)低保護(hù)權(quán)限的文件用于backup。然后在設(shè)備被解鎖之后,也就是你的app可以為所欲為的時(shí)候把你想要的數(shù)據(jù)找回來,麻煩是麻煩點(diǎn),但看起來應(yīng)該很可靠。

tips:新創(chuàng)建的文件如果未指定attributes,它會(huì)分配一組默認(rèn)的屬性,針對文件保護(hù),系統(tǒng)是怎么分配的并沒有找到可靠資料,自己測試是出現(xiàn)了兩種情況,一種是NSFileProtectionComplete,還有一種是NSFileProtectionCompleteUntilFirstUserAuthentication。最后貼一張圖:

測試發(fā)現(xiàn),NSUserDefaults對應(yīng)的那個(gè).plist文件就是圖示屬性,保護(hù)級別較低。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

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

  • 轉(zhuǎn)載原文鏈接 面試能力要求:精通iphone的UI開發(fā),能熟練操作復(fù)雜表視圖,熟練使用圖層技術(shù), 可以自定義UI控...
    Lonely__M閱讀 7,643評論 2 24
  • 本文章轉(zhuǎn)自 對iOS10新增Api的詳細(xì)探究這里是直接復(fù)制的,需要的請?jiān)L問下面的連接http://www.cnbl...
    TsingQue閱讀 377評論 0 1
  • 1,NSObject中description屬性的意義,它可以重寫嗎?答案:每當(dāng) NSLog(@"")函數(shù)中出現(xiàn) ...
    eightzg閱讀 4,185評論 2 19
  • 1.項(xiàng)目經(jīng)驗(yàn) 2.基礎(chǔ)問題 3.指南認(rèn)識 4.解決思路 ios開發(fā)三大塊: 1.Oc基礎(chǔ) 2.CocoaTouch...
    陽光的大男孩兒閱讀 5,024評論 0 13
  • 循環(huán)引用:http://ios.jobbole.com/82077/類別的作用功能:1.擴(kuò)充現(xiàn)有類的功能2.對現(xiàn)有...
    得一切從簡閱讀 521評論 0 1