iPhone鎖屏狀態(tài)會(huì)對(duì)文件的讀寫產(chǎn)生影響桑涎,導(dǎo)致一些在后臺(tái)模式下的操作并不能達(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ù)等級(jí)可岂,相對(duì)應(yīng)的值也是NSString類型的错敢。在File Protection Values.中列了出來(lái)。下面來(lái)一個(gè)個(gè)看。
extern NSString* const NSFileProtectionNone;
extern NSString* const NSFileProtectionComplete;
extern NSString* const NSFileProtectionCompleteUnlessOpen;
extern NSString* const NSFileProtectionCompleteUntilFirstUserAuthentication;
NSFileProtectionNone:文件沒有設(shè)置任何保護(hù)稚茅,隨時(shí)可以讀寫纸淮。
NSFileProtectionComplete:最完備等級(jí)的保護(hù),文件以加密形式寫在磁盤中亚享,當(dāng)設(shè)備(iPhone/iPad)在Locked(鎖屏咽块,還是帶密碼的那種)狀態(tài)或者booting(正在開機(jī))時(shí)無(wú)法讀寫。
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這么做也是出于一些安全的考慮盲泛,但是對(duì)于一些在后臺(tái)模式下的應(yīng)用,NSFileProtectionComplete保護(hù)級(jí)別的文件可能會(huì)造成一些不便键耕,例如寫入數(shù)據(jù)庫(kù)失斔鹿觥(我前面提到過(guò)),下載的文件未完成,etc.但是之間改變權(quán)限似乎又有安全隱患(其實(shí)我不是很care...)屈雄。比較建議的做法是村视,創(chuàng)建一個(gè)低保護(hù)權(quán)限的文件用于backup。然后在設(shè)備被解鎖之后酒奶,也就是你的app可以為所欲為的時(shí)候把你想要的數(shù)據(jù)找回來(lái)蚁孔,麻煩是麻煩點(diǎn),但看起來(lái)應(yīng)該很可靠惋嚎。
tips:新創(chuàng)建的文件如果未指定attributes杠氢,它會(huì)分配一組默認(rèn)的屬性,針對(duì)文件保護(hù)另伍,系統(tǒng)是怎么分配的并沒有找到可靠資料鼻百,自己測(cè)試是出現(xiàn)了兩種情況,一種是NSFileProtectionComplete,還有一種是NSFileProtectionCompleteUntilFirstUserAuthentication温艇。最后貼一張圖:
測(cè)試發(fā)現(xiàn)因悲,NSUserDefaults對(duì)應(yīng)的那個(gè).plist文件就是圖示屬性,保護(hù)級(jí)別較低。