一、沙盒和應用程式包
•iOS應用程式隻能在為該改程式建立的檔案系統中讀取檔案,不可以去其它地方通路,此區域被稱為沙盒
•iOS常用目錄:
–Bundle
–Documents
–Library/Caches
–Library/Preference
–tmp
顯示mac隐藏檔案:defaults write com.apple.finder AppleShowAllFiles -bool true
隐藏mac隐藏檔案:defaults write com.apple.finder AppleShowAllFiles -bool false
應用程式包路徑:資源庫/Developer/CoreSimulator/Devices(裝置plist檔案)/data/Containers/Bundle/Application(應用程式包)
沙盒路徑:資源庫/Developer/CoreSimulator/Devices(裝置plist檔案)/data/Containers/Data/Application/(Document、Library、tmp)Library/(Caches緩存、Preferences使用者偏好設定)
•應用程式包:(Bundle)包含了所有的資源檔案和可執行檔案
•Documents:儲存應用運作時生成的需要持久化的資料,iTunes同步裝置時會備份該目錄。例如,遊戲應用可将遊戲存檔儲存在該目錄
•
•Library/Caches:儲存應用運作時生成的需要持久化的資料,iTunes同步裝置時不會備份該目錄。一般存儲體積較大、不需要備份的非重要資料
•Library/Preference:儲存應用的所有偏好設定,iOS的設定應用會在該目錄中查找應用的設定資訊。iTunes同步裝置時會備份該目錄
•tmp:儲存應用運作時所需的臨時資料,使用完畢後再将相應的檔案從該目錄删除。應用沒有運作時,系統也可能會清除該目錄下的檔案。iTunes同步裝置時不會備份該目錄
1、擷取程式的Home目錄
NSString *home = NSHomeDirectory();
沙盒目錄常用擷取方式:
2、擷取Documents目錄
NSUserDomainMask 代表從使用者檔案夾下找
YES 代表展開路徑中的波浪字元“~”
NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
隻有一個比對目錄,是以這個集合裡面隻有一個元素
NSString *doc = documents[0];
使用字元串拼接的方式擷取目錄名
NSString *doc2 = [home stringByAppendingPathComponent:@"Documents”];
注意:
不建議采用字元串拼接的方式擷取目錄,因為新版本的作業系統可能會修改預設目錄名稱。
3、擷取Cache目錄
NSArray *caches = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cache = caches[0];
4、Preferences目錄
通過NSUserDefaults類存取該目錄下的設定資訊
5、擷取Tmp目錄
NSString *tmpDir = NSTemporaryDirectory();
說明:擷取路徑隻是一個必要的過程,目的是為了對路徑下的檔案進行操作。
二、偏好設定(不論在程式的那個地方,都可以設定資料儲存到本地磁盤,作為全局資料來通路,例如界面跳轉時可以用來傳資料)
偏好設定的寫入:
•很多iOS應用都支援偏好設定,比如儲存使用者名、密碼、字型大小等設定,iOS提供了一套标準的解決方案來為應用加入偏好設定功能
•每個應用都有個NSUserDefaults執行個體,通過它來存取偏好設定
•例如:儲存使用者名、字型大小、是否自動登入
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"itcast.cn" forKey:@"userName"];
[defaults setFloat:18.0f forKey:@"fontSize"];
[defaults setBool:YES forKey:@"autoLogin"];
偏好設定的讀取:
// 讀取系統偏好
NSString *userName = [defaults objectForKey:@"userName"];
float fontSize = [defaults floatForKey:@"fontSize"];
BOOL autoLogin = [defaults boolForKey:@"autoLogin"];
注意:UserDefaults設定資料時,不是立即寫入,而是根據時間戳定時地把緩存中的資料寫入本地磁盤。是以調用了set方法之後資料有可能還沒有寫入磁盤,應用程式就終止了。
出現以上問題,可以通過調用synchornize方法強制寫入:
[defaults synchronize];
三、對象歸檔、解歸檔(也用來存儲資料)
1、NSKeyedArchiver 歸檔、解歸檔(隻适用于OC裡面内置的對象)
+ (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path;//歸檔
+ (id)unarchiveObjectWithFile:(NSString *)path;//接歸檔
2、NSKeyedArchiver 歸檔、解歸檔(自定義的對象,必須要實作<NSCoding>協定)
- (void)encodeWithCoder:(NSCoder *)aCoder;//歸檔的協定方法
- (id)initWithCoder:(NSCoder *)aDecoder;//解歸檔的協定方法
3、對多個對象進行歸檔、解歸檔
- (instancetype)initForWritingWithMutableData:(NSMutableData *)data;//用一個可變的data建立歸檔對象
- (void)encodeObject:(id)objv forKey:(NSString *)key;//将對象歸檔
- (void)finishDecoding//完成歸檔(必須執行)
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile//将資料寫進歸檔檔案中
- (instancetype)initForReadingWithData:(NSData *)data;//用一個data建立解歸檔對象,這個data由檔案中擷取而來
- (id)decodeObjectForKey:(NSString *)key;//解歸檔
程式猿神奇的手,每時每刻,這雙手都在改變着世界的互動方式!
本文轉自當天真遇到現實部落格園部落格,原文連結:http://www.cnblogs.com/XYQ-208910/p/4822420.html,如需轉載請自行聯系原作者