轉載請注明出處,原文網址:http://blog.csdn.net/m_changgong/article/details/8262079 作者:張燕廣
IOS資料持久化方式大概有5種:
1)User Defaults 2)屬性清單 3)歸檔 4)sqlite3資料庫 5)coreData
其實1)與2)都是用.plist屬性檔案儲存資料,隻是操作方式及儲存位置不同,這5種方式的使用情景及其優缺點,後面的博文會逐一進行對比分析。
下面首先示範第一種方式User Defaults。
實作的功能:1)示範NSUserDefaults持久化資料。
關鍵詞:資料持久化 NSUserDefaults
1、建立一個Sigle View Application,命名為Persistence_NSUserDefaults,工程結構如下:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLyczN38VO5YDOwcDN1MTMvwVNw8CXyEjMxAjMvw1ckF2bsBXdvwFdl5mLuR2cj5Set1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
2、修改ViewController.xib,添加兩個Label控件和兩個TextField控件,如下:
3、修改ViewController.h,如下:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@property(retain,nonatomic)IBOutlet UITextField *server;
@property(retain,nonatomic)IBOutlet UITextField *port;
@end
連接配接輸出口server、port,如下:
4、修改ViewController.m,如下:
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize server;
@synthesize port;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSLog(@"viewDidLoad");
//初始化資料
[self initData];
//訂閱通知UIApplicationDidEnterBackgroundNotification,進行資料儲存操作
UIApplication *app = [UIApplication sharedApplication];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(applicationWillDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:app];
}
//初始化資料
-(void)initData{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
server.text = [defaults objectForKey:@"server"];
port.text = [defaults objectForKey:@"port"];
}
-(void)applicationWillDidEnterBackground:(NSNotification *)notification{
NSLog(@"#applicationWillEnterForeground");
[self saveData];
}
//儲存資料
-(void)saveData{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:server.text forKey:@"server"];
[defaults setObject:port.text forKey:@"port"];
[defaults synchronize];//強制User Defaults系統進行儲存
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
server = nil;
port = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
@end
5、編譯、運作,在TextField中輸入如下内容:
退出Simulator,然後重新運作程式,上次輸入的内容已顯示在TextField中。
6、資料到底儲存到哪兒了???
iPhone應用程式沙盒,或許你聽過這個東東,沒聽過也沒關系,下面就說說它。
1)iPhone應用程式隻能在為該改程式建立的檔案系統中讀取檔案,不可以去其它地方通路,此區域被成為沙盒。
2) 沙盒在哪兒呢?先來看一下iPhone應用程式安裝後的存放位置,我mac上的位址如下:
/Users/duobianxing/Library/Application Support/iPhone Simulator/5.0
我的模拟器是5.0的,截圖如下:
打開Applications目錄,截圖如下:
上圖中每個目錄都是一個應用程式的沙盒,最上面的那個目錄就是剛剛示範的工程Persistence_NSUserDefaults安裝後的目錄,打開該目錄,截圖如下:
也可以打開Applications下的其它目錄驗證一下,每個iPhone應用程式自己的沙盒下有3個目錄,分别是:
1)Documents:應用程式資料儲存到該目錄下,但是基于NSUserDefaults的資料不會儲存到該目錄下(是以,剛才示範的工程Persistence_NSUserDefaults的資料沒有儲存到該目錄下)
2)Library:基于NSUserDefaults的資料會儲存到該目錄,工程Persistence_NSUserDefaults的資料一定儲存到該目錄下啦,趕緊找一下吧,
子目錄Preferences下的com.zyg.ios.Persistence-NSUserDefaults.plist檔案儲存了server、port資料,打開看一下,截圖如下:
可以發現,使用NSUserDefaults時,資料預設儲存在沙盒的Library目錄下的檔案:工程名稱.plist中。
3)tmp:存儲臨時檔案。每個應用程式應該負責删除自己tmp目錄下的臨時資料。
7、總結:
NSUserDefaults一般用于儲存首選項資訊、緩存資料等少量資料。
本文工程Persistence_NSUserDefaults純粹為了示範,實際開發中不一定這樣應用。
需要源碼的網友請留言哦