IOS進階編程之二:IOS的資料存放區與IO

來源:互聯網
上載者:User

標籤:

一、應用程式沙箱

     IOS應用程式職能在系統為該應用所分配的檔案地區下讀寫檔案,這個檔案地區就是應用程式沙箱。所有的非代碼檔案如:圖片、聲音、映象等等都存放在此。

在mac中command+shift+G命令,然後輸入users/使用者名稱/library命令進入庫,然後依次進入application support/iphone simulator/版本/applications檔案夾,這裡面的各個檔案夾對應著各個應用程式。

Documents:除了基於NSUserDefaults的喜好設定設定外,應用程式的資料、檔案都儲存在該目錄下

Library:基於NSUserDefaults的喜好設定參數儲存在Library/Preferences下

tmp:應用程式儲存臨時檔案,ios同步時itunes不會同步這裡面的資料,當應用程式不在需要這些檔案時,應當刪除以避免佔用空間。

擷取documents路徑:

1 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);2 NSString *dd = [paths objectAtIndex:0];

擷取tmp目錄:

1 NSString *tempPath = NSTemporaryDirectory();

那麼我們在儲存資料時使用哪種髮式比較好呢,這個當然還要具體情況具體對待。
當儲存小資料量的資料時,可以使用NSArray或者NSDictionary,調用writeToFile:atomically:方法寫入一個檔案,使用時讀取檔案內容即可。

當儲存大資料量的資料時,可以選擇使用sqllite,ios提供了CoreData架構。

 

二、應用程式參數與使用者預設設定

1、使用Settings Bundle

Settings Bundle時應用程式中的一組特殊檔案,用於儲存較簡單的各種配置資訊。如果使用了Settings Bundle,ios內建的設定應用則會顯示你的app

2、使用NSUserDefaults讀取、儲存應用程式參數

NSUserDefaults是一個單例類,每個應用程式只有一個NSUserDefaults對象,Settings Bundle設定的參數,也可以通過NSUserDefaults來讀取和設定

擷取NSUserDefaults的方法:

1 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

擷取NSUserDefaults對象後,可以擷取和設定應用程式參數

xxForKey:(NSString *) key  =>xx表示各種類型,根據key擷取值

setBool:(xxx) value forKey:(NSString *) key =>設定參數

設定完參數後,調用synchronize方法進行儲存。

3、屬性列表

屬性列表就是文章開始提到的利用NSArray和NSDictionary將資料寫入到檔案的儲存方法。

但是有一些限制,只有下列類型的值儲存到NSArray和NSDictionary中才可以直接調用writeToFile方法執行儲存:

NSArray、NSMutableArray、NSDictionary、NSMutableDictionary、NSData、NSMutableData、NSString、NSMutableString、NSValue、NSNumber

如果NSArray和NSDictionary儲存了我們自訂的類,那麼將不能直接調用writeToFile方法執行儲存。(可以考慮使用對象歸檔的方法進行儲存)

 1 //使用屬性列表儲存3個使用者的帳號密碼 2     accountList = [[NSMutableArray alloc] init]; 3     [accountList addObject:[NSDictionary 4                                 dictionaryWithObjects:[NSArray arrayWithObjects:@"loginname",@"loginpwd", nil] 5                                 forKeys:[NSArray arrayWithObjects:@"305213781",@"123123", nil]]]; 6     [accountList addObject:[NSDictionary 7                             dictionaryWithObjects:[NSArray arrayWithObjects:@"loginname",@"loginpwd", nil] 8                             forKeys:[NSArray arrayWithObjects:@"475782389",@"123456", nil]]]; 9     [accountList addObject:[NSDictionary10                             dictionaryWithObjects:[NSArray arrayWithObjects:@"loginname",@"loginpwd", nil]11                             forKeys:[NSArray arrayWithObjects:@"330577588",@"123456789", nil]]];12     [accountList writeToFile:[self filePath] atomically:YES];13     14     //使用UIActionSheet提示使用者儲存成功15     UIActionSheet *sheet =[[UIActionSheet alloc] initWithTitle:@"儲存成功" delegate:nil cancelButtonTitle:nil destructiveButtonTitle:@"確定" otherButtonTitles:nil, nil];16     [sheet showInView:self.view];

 

4、使用Sqlite3資料庫

1)為項目增加libsqlite3.dylib,這是一個原生的C函數庫

常用函數:

int sqlite3_close(sqlite3 *):關閉sqlite3 *所代表的資料連線,並釋放底層資料庫連接資源。在調用該函數之前,必須先調用sqlite3_finalize()函數,調用sqlite3_blob_close()函數關閉所有的blob處理器,否則將會返回SQLITE_BUSY

int sqlite3_exec(sqlite3*,const char *sql, int (*callback)(void*, int ,char**,char**),void *,char **errmsg):用於執行沒有傳回值的sql語句

sqlite3_int64  sqlite3_last_insert_rowid(sqlite3*):返回sqlite3代表的資料庫最後一次插入行的id

int sqlite3_changes(sqlite3*):執行某條dml語句後,返回受影響行數

void sqlite3_interrupt(sqlite3*):中斷一個長時間執行的查詢語句

int sqlite3_complete(const char *sql):用於判斷sql語句是否執行完成

int sqlite3_open(const char * filename,sqlite3 ** ppdb):開啟與filename檔案的連結,並讓ppdb參數引用被開啟的資料庫連接

const char *sqlite3_sql(sqlite3_stmt *pStmt):用於提取sqlite3_stmt(先行編譯SQL語句產生的結果)中封裝的sql語句

等等。。。太多了不一一列舉了

操作sqlite資料庫的大致步驟如下:

1、調用sqlite3_open方法開啟與資料庫的串連

2、執行語句

3、sqlite3_close函數關閉資料庫連接

 

2)使用Core Data架構

Core Data架構是一個純粹的物件導向的架構,允許開發人員以物件導向的方式持久化操作SQLite資料庫。core data底層的持久化儲存方式可以是Sqlite資料庫,也可以是xml,也可以是記憶體。

Core Data的核心概念是實體,由Core Data管理的模型對象,它必須是NSManagedObject類或者它的子類的執行個體。

Core Data應用中的核心API有如下幾個:

託管物件模型(NSManagedObjectModel):該對象負責管理整個應用的所有實體以及實體之間的關聯關係。當開發人員使用Xcode的圖形介面設計了實體與實體間的關聯關係之後,需要使用該對象來載入、管理應用的託管物件模型

持久化儲存協調器(NSPersistentStoreCoordinator):負責管理底層的隱藏檔,例如sqlite資料庫等等

託管物件內容(NSManagedObjectContext):該對象是Core Data的核心,增刪改查都需要通過它來進行

 

IOS進階編程之二:IOS的資料存放區與IO

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.