我們在開發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 standardUserDefaults] registerDefaults:@{@"color":@"blue"}];;但是此時,它檢測到color這個key已經存在,並且'color'=='red',
就不將blue寫入NSUserDefaults中。
此時依然是'color'=='red';