NSUserDefaults NSUserDefaults类提供了一个与默认系统进行交互的编程接口。NSUserDefaults对象是用来保存,恢复应用程序相关的偏好 设置,配置数据等等。默认系统容许应用程序自定义它的行为去迎合用户的喜爱。你能够在程序运行的时候从用户默认的数据库中读取程序的设置。同时 NSUserDefaults的缓存避免了在每次读取数据时候都打开用户默认数据库的操做。能够经过调用synchronize方法来使内存中的缓存与用 户默认系统进行同步。 NSUserDefaults类提供了很是方便的方法来获取经常使用的类型,例如 floats,doubles,intergers,Booleans,URLs。因此一个NSUserDefaults的对象必须是属性表,这也就是说 咱们能够存储NSData,NSString,NSNUmber,NSDate,NSArray,NSDictionary这些实例。若是你想存储其余类 型的对象,你要将其归档并建立一个NSData来实现存储。 从NSUserDefaults返回的值是不可改变的,即使是你在存储的时候使用的是可变的值。例如你使用mutable string作为“MyStringDefault”的值,当你作使用stringForKey:方法获取的值,这个值仍然是不可变的。 NSUserDefaults是单例,同时也是线程安全的 在使用NSUserDefaults的时候, 先看下下面的代码 NSDictionary* defaults = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]; NSLog(@"Defaults: %@", defaults); 是用来获取设备上的全部的NSUserDefaults的设置。 上面代码输出了 Defaults: { AppleITunesStoreItemKinds = ( eBook, document, "software-update", booklet, "itunes-u", newsstand, artist, podcast, "podcast-episode", software ); AppleKeyboards = ( "zh_Hans-Pinyin@sw=Pinyin;hw=US", "en_US@hw=US;sw=QWERTY" ); AppleKeyboardsExpanded = 1; AppleLanguages = ( "zh-Hans", en, fr, de, ja, nl, it, es, pt, "pt-PT", da, fi, nb, sv, ko, "zh-Hant", ru, pl, tr, uk, ar, hr, cs, el, he, ro, sk, th, id, "en-GB", ca, hu, vi ); 若是想单独看某个key的设置,例如: NSArray *array = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleKeyboards"]; NSLog(@"Keyboards: %@", array); 会输出 AppleKeyboards = ( "zh_Hans-Pinyin@sw=Pinyin;hw=US", "en_US@hw=US;sw=QWERTY" ); 在看下面的代码 if([[NSUserDefaults standardUserDefaults] objectForKey:@"message"]==nil){ [[NSUserDefaults standardUserDefaults] setObject:@"This_is_my_default_message" forKey:@"message"]; } 代码意思是判断NSUserDefaults的“message”key 在dictionaryRepresentation中是否存在,若是不存在就 设置“message”key为This_is_my_default_message。 在加上句[[NSUserDefaults standardUserDefaults] synchronize];,这样这个设置就存到默认参数中了。 也见过别人把默认参数的设置写到applicationDidFinishLaunching注册的, - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { NSDictionary *defaultValues = [NSDictionary dictionaryWithObjectsAndKeys: @"This_is_my_default_message", @"message", nil]; [[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues]; [[NSUserDefaultsController sharedUserDefaultsController] setInitialValues:defaultValues]; } 固然写到applicationDidFinishLaunching中注册和不写到里面效果是同样的,只是代码的优美问题。