日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NSUserDefault 的使用

發布時間:2025/3/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NSUserDefault 的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、NSUserDefault的使用:

作用:NSUserDefaults類提供了一個與默認系統進行交互的編程接口。NSUserDefaults對象是用來保存,恢復應用程序相關的偏好設置,配置數據等等。默認系統允許應用程序自定義它的行為去迎合用戶的喜好。你可以在程序運行的時候從用戶默認的數據庫中讀取程序的設置。同時NSUserDefaults的緩存避免了在每次讀取數據時候都打開用戶默認數據庫的操作。可以通過調用synchronize方法來使內存中的緩存與用戶默認系統進行同步。

原理:NsUserDefault是用戶輕量級的數據持久化,主要用于保存用戶程序的配置等信息,以便下次啟動程序后能恢復上次的設置。因為是寫到了硬盤上,所以會出現用多了會造成系統浪費,內存占用過大等問題。

(1)、該數據實際上是以“鍵值對”形式保存的(類似于NSDictionary),因此我們需要通過key來讀取或者保存數據(value)。

(2)、NSUserDefaults類提供了非常方便的方法來獲取常用的類型,例如floats,doubles,intergers,Booleans,URLs。所以這也就是說我們可以存儲NSData,NSString,NSNUmber,NSDate,NSArray,NSDictionary(目前有五種類型)這些實例。如果你想存儲其他類型的對象,你要將其歸檔并創建一個NSData來實現存儲。

? ? ? (3)、從NSUserDefaults返回的值是不可改變的,即便是你在存儲的時候使用的是可變的值。例如你使用mutable string做為“MyStringDefault”的值,當你做使用stringForKey:方法獲取的值,這個值仍然是不可變的。

? ? (4)、NSUserDefaults是單例,同時也是線程安全的

語法:

存儲整型的例子:

1、獲取一個NSUserDefaults引用:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

2、保存數據

[userDefaults setInteger:1 forKey:@"segment"];

?

[userDefaults synchronize];

3、讀取數據

int i = [userDefaults integerForKey:@"segment"];

存儲其他數據類型的例子:

保存數據:保存UIcolor類型的,超出上面的5種數據類型,就要進行歸檔,把它們歸檔成data類型的數據之后再保存。

?

NSData *objColor = [NSKeyedArchiver archivedDataWithRootObject:[UIColor redColor]];

[[NSUserDefaults standardUserDefaults]setObject:objColor forKey:@"myColor"];

?

讀取數據:

?

NSData *objColor = [[NSUserDefaults standardUserDefaults]objectForKey:@"myColor"];

?

UIColor *myColor = [NSKeyedUnarchiver unarchiveObjectWithData:objColor];

2、NSUserDefault的使用小技巧:

(1)、NSUserDefault保存的數據在程序沒有關閉前能成功讀取到,但是當應用程序重啟之后,就無法讀取到,原因就是數據沒有即時寫入。通過官方文檔可以了解到,UserDefaults是根據時間戳定時的把緩存中的數據寫入本地磁盤,而非即時寫入。所以調用set方法之后數據有可能還沒有寫入磁盤,應用程序就已經終止了。保險起見,我們在對重要的數據保存時使用synchornize方法強制寫入。但是也要注意,不用頻繁的使用synchornize

?

(2)、在使用NSUserDefault的時候,很多人以為

[[NSUserDefaults standardUserDefaults] setObject:array forKey:@"testInfo"] ;

后就已經算存儲好了,再通過

[[NSUserDefaults standardUserDefaults] objectForKey:@"testInfo"];

就可以取出剛剛存的數據。

?

其實正常情況下沒有問題,但是當重起

程序,關鍵字testInfo對應的竟然是空,這是什么情況呢??

?

我看看NSUserDefaults的頭文件,就會發現,其實還有另外一個方法:synchronize,數據即時寫入。

?

如果我們在set后,執行下面的語句:

[[NSUserDefaults standardUserDefaults] synchronize];?

那么就不會出現上面的取出數據為空的情況了。

?

完整代碼如下:

//存入數據

NSUserDefaults?*defaults?=[NSUserDefaults?standardUserDefaults];

[defaults?setObject:@"111"?forKey:@"t

est"];

//把數據寫到硬盤上

[defaults?synchronize];

?

//取出數據

NSString?*testStr?=[defaults?objectForKey:@"test"];

NSLog(@"testStr is: %@",testStr);

3、NSUserDefault的一些實際使用:

在使用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中注冊和不寫到里面效果是一樣的,只是代碼的優美問題。

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的NSUserDefault 的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。