NSUserDefaults用於存儲數據量小的數據,例如用戶配置。並不是所有的東西都能往里放的,
只支持:NSString, NSNumber, NSDate, NSArray, NSDictionary
存放於一個plist文件中。這個文件位於在 app同級目錄的/Library/Preferences目錄下
其實 NSUserDefaults主要就是setObject和objectForKey差不多就夠了,要有多復雜的數據需要存儲就直接用其他的方法好了;
此外,還有個什么registerDefaults方法,也不是很需要的樣子
注意點:UserDefaults不是立即寫入,而是根據時間戳定時的把緩存中的數據寫入本地磁盤。所以調用了set方法之后數據有可能還沒有寫入磁盤應用程序就終止了。出現以上問題。可以通過調用synchornize方法強制寫入。
代碼如下:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:@"111" forKey:@"myTest"]; [defaults synchronize]; NSString *testStr = [defaults objectForKey:@"myTest"]; NSLog(@"testStr is: %@",testStr);
=================分隔線,上面這些差不多夠了,下面的只是個例子===========================
//方法1:在需要使用到的地方寫入下列代碼即可,無需導入任何文件
//存數據 NSUserDefaults *appDefault =[NSUserDefaultsstandardUserDefaults]; [appDefault setObject:@"123" forKey:@"one"];
// saving an NSInteger
appDefault setInteger:42 forKey:@"integerKey"];
[
// saving a Double
appDefault setDouble:3.1415 forKey:@"doubleKey"];
[
// saving a Float
appDefault setFloat:1.2345678 forKey:@"floatKey"];
[
//讀數據
NSUserDefaults *appDefault =[NSUserDefaultsstandardUserDefaults];
NSLog(@"qq%@",[appDefault objectForKey:@"one"]);
// getting an NSString
appDefault
NSString *myString = [stringForKey:@"
keyToLookupString
"];
// getting an NSInteger
appDefault
NSInteger myInt = [integerForKey:@"
integerKey
"];
// getting an Float
appDefault
float myFloat = [floatForKey:@"
floatKey
"];
//方法2:全局定義,即不用每個使用到的地方都寫 NSUserDefaults *appDefault =[NSUserDefaultsstandardUserDefaults]; 語句
//AppDelegate.h文件中添加 #define appDelegate ((AppDelegate *)[[UIApplication sharedApplication] delegate]) @property (assign, nonatomic)NSUserDefaults *appDefault;
//AppDelegate.m文件中添加 @synthesize appDefault; appDelegate.appDefault = [NSUserDefaults standardUserDefaults];
//順帶初始化下
[appDelegate.appDefault setObject:NULL forKey:@"one"];
然后在任意使用的地方添加:
//存數據 [appDelegate.appDefault setObject:@"122333" forKey:@"one"]; //讀數據 [appDelegate.appDefault objectForKey:@"one"]
還有一個好的方法來存儲你的當前實例的全局變量
再建立一個類,專用來存放你的全局的變量,這樣可以分得更清楚
特別是數據相對較多,較復雜的情況
用專用的類來存儲你的全局數據,是更好的辦法