天天看點

iPhone開發【二十】資料持久化總結之第1篇—NSUserDefaults

轉載請注明出處,原文網址: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,工程結構如下:

iPhone開發【二十】資料持久化總結之第1篇—NSUserDefaults

2、修改ViewController.xib,添加兩個Label控件和兩個TextField控件,如下:

iPhone開發【二十】資料持久化總結之第1篇—NSUserDefaults

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,如下:

iPhone開發【二十】資料持久化總結之第1篇—NSUserDefaults

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中輸入如下内容:

iPhone開發【二十】資料持久化總結之第1篇—NSUserDefaults

退出Simulator,然後重新運作程式,上次輸入的内容已顯示在TextField中。

6、資料到底儲存到哪兒了???

iPhone應用程式沙盒,或許你聽過這個東東,沒聽過也沒關系,下面就說說它。

1)iPhone應用程式隻能在為該改程式建立的檔案系統中讀取檔案,不可以去其它地方通路,此區域被成為沙盒。

2)  沙盒在哪兒呢?先來看一下iPhone應用程式安裝後的存放位置,我mac上的位址如下:

/Users/duobianxing/Library/Application Support/iPhone Simulator/5.0

我的模拟器是5.0的,截圖如下:

iPhone開發【二十】資料持久化總結之第1篇—NSUserDefaults

打開Applications目錄,截圖如下:

iPhone開發【二十】資料持久化總結之第1篇—NSUserDefaults

上圖中每個目錄都是一個應用程式的沙盒,最上面的那個目錄就是剛剛示範的工程Persistence_NSUserDefaults安裝後的目錄,打開該目錄,截圖如下:

iPhone開發【二十】資料持久化總結之第1篇—NSUserDefaults

也可以打開Applications下的其它目錄驗證一下,每個iPhone應用程式自己的沙盒下有3個目錄,分别是:

1)Documents:應用程式資料儲存到該目錄下,但是基于NSUserDefaults的資料不會儲存到該目錄下(是以,剛才示範的工程Persistence_NSUserDefaults的資料沒有儲存到該目錄下)

2)Library:基于NSUserDefaults的資料會儲存到該目錄,工程Persistence_NSUserDefaults的資料一定儲存到該目錄下啦,趕緊找一下吧,

子目錄Preferences下的com.zyg.ios.Persistence-NSUserDefaults.plist檔案儲存了server、port資料,打開看一下,截圖如下:

iPhone開發【二十】資料持久化總結之第1篇—NSUserDefaults

可以發現,使用NSUserDefaults時,資料預設儲存在沙盒的Library目錄下的檔案:工程名稱.plist中。

3)tmp:存儲臨時檔案。每個應用程式應該負責删除自己tmp目錄下的臨時資料。

7、總結:

NSUserDefaults一般用于儲存首選項資訊、緩存資料等少量資料。

本文工程Persistence_NSUserDefaults純粹為了示範,實際開發中不一定這樣應用。

需要源碼的網友請留言哦