2011-07-08 56 views
2

我想知道這是最好的方式(一個蘋果的指導方針或按常理建議)來存儲大文件的iOS應用程序..保存在iOS應用程序的大文件

隨着大我的意思是比如一場比賽的節省(可以說,比方說500kb),這樣,考慮plists是不可行的。

我應該使用普通的Cocoa文件管理API保存它嗎?標準stdiofopen,fwrite,不管)?

+0

看起來好像已經有一個API用於編寫任何你想要的文件。 http://stackoverflow.com/questions/1526416/iphone-writing-binary-data我不確定是否有限制;至少我還沒有找到任何東西。 – Suroot

回答

3

你的首要任務應該是整體的用戶體驗,包括:

  1. 讓您的應用程序響應:僅保存什麼改變了。如果你不必一次保存500k,但只有一小部分發生了變化,你可能需要考慮sqlite或多個較小的文件。
  2. 適度使用設備資源:如果您的應用程序使用了不成比例的可用存儲空間量,則用戶更可能將其刪除。
  3. 使用最適合您的方法的API以上面的1 & 2。如果不改善用戶體驗,那麼使用特定的API就沒有意義了。

以我的經驗,大文件操作往往是相對慢,但CPU是相對快,所以如果你有文本保存的一大塊,使用zlib的壓縮它保存作品(文本壓縮率很高,zlib非常快)。

2

有很多選擇,當然最好的取決於您的要求。如果您願意,您當然可以使用C標準I/O。如果你將所有的遊戲數據放在一個大緩衝區中,NSData的讀/寫文件方法很容易使用。如果你有一組實現NSCoding的對象,你可以使用NSKeyedArchiver/Unarchiver。

這裏有一種方法使用的NSFileManager找到您的應用程序的文件目錄:

NSString *docsDir = [NSHomeDirectory() stringByAppendingPathComponent: @"Documents"]; 
+0

我可以使用標準I/O輕鬆管理所有事情,我主要擔心的是存儲文件的位置,可能存在限制或其他問題?我真的不知道應用程序是如何由iOS(其工作目錄或「數據」目錄或其他)管理的 – Jack

+0

使用[NSFileManager](http://tinyurl.com/4eflxtl)來查找應用程序的Documents目錄並寫入你的數據在那裏。每個應用程序在文件系統中都有自己的小空間,您無法在該空間之外進行讀取或寫入。當用戶同步他們的設備時,Documents目錄將被備份,這也是有用的。添加示例以回答上述問題。 – Caleb

相關問題