ios數據永久存儲之----NSUserDefaults


我們在開發app時不可避免的會在本地存儲一些數據,NSUserDefaults就是系統提供的一個用來數據存儲的類,本片文章就來介紹一些NSserdefazults的用法。

 

詳細內容:https://my.oschina.net/u/1245365/blog/294449

 

 

首先對於新手來說NSUserdefaults到底是個什么東東呢???

NSUserDefaults 是iOS系統提供的一個單例,在整個程序中只有一個實例對象,他可以用於數據永久存儲,而且簡單實用,所以大家都比較喜歡這用方式。

1.獲取NSUserDefault的單例 :通過standardUserDefaults

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

2.存儲方式:

NSUserDefaults 單例已key-value  的形式存儲一系列的設置,key是名稱,value是相應的數據。存數據(objectForKey:),取數據(setObject:forKey:)

存儲的數據類型包括:NSData,NSString,NSNumber,NSDate, NSArray,NSDictionary。假如你要存儲圖片的話,就不能直接存儲了,需要先將圖片歸檔為NSData類型。

3.存取不同類型的數據:
*******存:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:@”jack“ forKey:@"firstName"]; [defaults setInteger:10 forKey:@"Age"]; UIImage *image =[UIImage imageNamed:@"somename"]; NSData *imageData = UIImageJPEGRepresentation(image, 100);//把image歸檔為NSData [defaults setObject:imageData forKey:@"image"]; [defaults synchronize];

其中,方法synchronize是為了強制存儲,其實並非是必須得,因為這個方法會在系統中默認調用,但是你確認要馬上就儲存,這是可以的

*********讀

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *firstName = [defaults objectForKey:@"firstName"] NSInteger age = [defaults integerForKey:@"Age"]; NSData *imageData = [defaults dataForKey:@"image"]; UIImage *image = [UIImage imageWithData:imageData];

注意:對相同的Key賦值約等於一次覆蓋,要保證每一個Key的唯一性

其他幾個存取不同類型數據的方法:

- setBool:forKey: - setFloat:forKey: - setInteger:forKey: - setDouble:forKey: - setURL:forKey:

我在項目中的簡單應用:
在appdelegate中通過

- (void)registerDefaults:方法來初始化,這個方法會check NSUserDefaults是否已經存在了相同的key,如果存在就不會將其覆蓋(相當於什么也沒做)。

簡單舉例來說明一下:

1.當第一次運行app時初始化了@"color":@"blue"

[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"color":@"blue"}];

這是NSUserDefaults里面'color'=='blue';

2.如果你在app中又重新設置了'color'=='red';

3.這是你重新運行一下你的app,仍然會調用[[NSUserDefaults standardUserDefaultsregisterDefaults:@{@"color":@"blue"}];;但是此時,它檢測到color這個key已經存在,並且'color'=='red',

就不將blue寫入NSUserDefaults中。

此時依然是'color'=='red';

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM