NSUserDefaults是用於保存應用程序設置,應用信息等輕量級數據的的一個類,其本質是將數據寫爲plist文件的形式保存在本地。在IOS中,系統爲每個應用程序都默認建立了一個NSUserDefaults對象。數組
+ (NSUserDefaults *)standardUserDefaults;安全
獲取系統默認建立的應用程序設置表網絡
+ (void)resetStandardUserDefaults;dom
這個方法用於將默認的UserDefaults釋放掉,並在下次使用時建立一個新的對象,須要注意的是,調用這個方法後,對原UserDefaults單例進行的KVO監聽將失效。ui
- (instancetype)initWithSuiteName:(NSString *)suitename;url
這個方法建立一個新的域:根據名字能夠建立一些不一樣的域,分別存儲幾套設置信息。spa
- (id)objectForKey:(NSString *)defaultName;操作系統
- (void)setObject:(id)value forKey:(NSString *)defaultName;.net
- (void)removeObjectForKey:(NSString *)defaultName;3d
上面三個方法是對對象存儲進行的操做,分別是存儲,獲取和刪除。
- (NSString *)stringForKey:(NSString *)defaultName;
獲取字符串數據
- (NSArray *)arrayForKey:(NSString *)defaultName;
獲取數組數據
- (NSDictionary *)dictionaryForKey:(NSString *)defaultName;
獲取字典數據
- (NSData *)dataForKey:(NSString *)defaultName;
獲取data數據
- (NSArray *)stringArrayForKey:(NSString *)defaultName;
獲取字符串數組數據
- (NSInteger)integerForKey:(NSString *)defaultName;
獲取整型數據
- (float)floatForKey:(NSString *)defaultName;
獲取浮點型數據
- (double)doubleForKey:(NSString *)defaultName;
獲取雙精度浮點型數據
- (BOOL)boolForKey:(NSString *)defaultName;
獲取布爾詩句
- (NSURL *)URLForKey:(NSString *)defaultName;
獲取網址數據
下面是一些對應的set方法
- (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName;
- (void)setFloat:(float)value forKey:(NSString *)defaultName;
- (void)setDouble:(double)value forKey:(NSString *)defaultName;
- (void)setBool:(BOOL)value forKey:(NSString *)defaultName;
- (void)setURL:(NSURL *)url forKey:(NSString *)defaultName;
- (void)registerDefaults:(NSDictionary *)registrationDictionary;
這個方法能夠經過字典對數據表進行賦值
- (void)addSuiteNamed:(NSString *)suiteName;
添加一個域
- (void)removeSuiteNamed:(NSString *)suiteName;
移除一個域
- (NSDictionary *)dictionaryRepresentation;
返回系統設置的信息,也是NSGlobalDomain域中的信息。
@property (readonly, copy) NSArray *volatileDomainNames;
返回一個數組,其中是全部不穩定域的名字
- (NSDictionary *)volatileDomainForName:(NSString *)domainName;
根據名字獲取不穩定域中的數據
- (void)setVolatileDomain:(NSDictionary *)domain forName:(NSString *)domainName;
根據名字設置不穩定域
- (void)removeVolatileDomainForName:(NSString *)domainName;
根據名字移除不穩定域
- (NSDictionary *)persistentDomainForName:(NSString *)domainName;
根據名字獲取穩定域的數據
- (void)setPersistentDomain:(NSDictionary *)domain forName:(NSString *)domainName;
根據名字設置穩定域
- (void)removePersistentDomainForName:(NSString *)domainName;
根據名字移除穩定域
- (BOOL)synchronize;
對象的同步方法,將內存中的數據寫入磁盤。
- (BOOL)objectIsForcedForKey:(NSString *)key;
判斷某個鍵值的數據是否存在
- (BOOL)objectIsForcedForKey:(NSString *)key inDomain:(NSString *)domain;
判斷某個域中某個鍵值的數據是否存在
注:目前的iOS版本已經不能經過下面的方法在應用間進行傳值!!!
咱們應該瞭解到,在IOS中,由於沙盒模式的存在,應用間是不容許互相訪問數據與傳值通訊的。這樣作的好處顯而易見:
一、保證了數據的安全性
二、數據的管理更加簡潔
三、當咱們刪除數據時,只須要將沙盒刪除。
在某些需求下,咱們可能會須要應用程序間的傳值與通訊,固然除了經過網絡外,對於很是小的數據量,好比驗證另外一應用從程序是否登陸,是否安裝而且開啓過一次,咱們也能夠經過NSUserDefaults的一個全局的數據表來實現。
NSUserDefaults的三個特殊的系統域以下:
NSString * const NSGlobalDomain;
這個是一個系統級別的全局的域,存儲這系統配置信息,咱們能夠經過它實現應用程序間傳值
NSString * const NSArgumentDomain;
這個是在本應用程序內可訪問的域,存儲着應用程序的信息
NSString * const NSRegistrationDomain;
這個是存放臨時數據的域
代碼示例以下:
首先在第一個工程中,咱們寫以下代碼運運行一下:
//獲取全局的域 NSDictionary * dic = [[NSUserDefaults standardUserDefaults]persistentDomainForName:NSGlobalDomain]; NSMutableDictionary * temDic = [NSMutableDictionary dictionaryWithDictionary:dic]; [temDic setObject:@"傳遞的值" forKey:@"應用1"]; //重設 [[NSUserDefaults standardUserDefaults]setPersistentDomain:temDic forName:NSGlobalDomain]; //同步 [NSUserDefaults resetStandardUserDefaults]; NSLog(@"%@",dic);
打印的結果是許多系統信息。
在第二個工程中,咱們這樣作:
NSDictionary * dic = [[NSUserDefaults standardUserDefaults]persistentDomainForName:NSGlobalDomain]; NSLog(@"%@\n--------------\n%@=%@",dic,@"應用1",[dic objectForKey:@"應用1"]);
結果以下:
2015-05-06 15:48:49.897 321[4100:186745] { AppleITunesStoreItemKinds = ( newsstand, podcast, "itunes-u", artist, booklet, document, eBook, software, "software-update", "podcast-episode" ); AppleLanguages = ( en, fr, de, "zh-Hans", "zh-Hant", ja, nl, it, es, "es-MX", ko, pt, "pt-PT", da, fi, nb, sv, ru, pl, tr, uk, ar, hr, cs, el, he, ro, sk, th, id, ms, "en-GB", "en-AU", ca, hu, vi, hi ); AppleLocale = "en_US"; MSVLoggingMasterSwitchEnabledKey = 0; "\U5e94\U75281" = "\U4f20\U9012\U7684\U503c"; } -------------- 應用1=傳遞的值
這樣,咱們就簡單實現了應用程序間的傳值,可是建議最好不要輕易操做系統的這個域。
專一技術,熱愛生活,交流技術,也作朋友。
——琿少 QQ羣:203317592