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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

iOS NSUserDefaults 简介 NSUserDefaults 存储自定义对象

發布時間:2025/3/14 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS NSUserDefaults 简介 NSUserDefaults 存储自定义对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

摘要?NSUserDefaults適合存儲輕量級的本地數據,一些簡單的數據(NSString類型的)例如密碼,網址等,NSUserDefaults肯定是首選,但是如果我們自定義了一個對象,對象保存的是一些信息,這時候就不能直接存儲到NSUserDefaults了

一、了解NSUserDefaults以及它可以直接存儲的類型?二、使用 NSUserDefaults 存儲自定義對象?1、將自定義類型轉換為NSData類型?2、將自定義類型數據存入?NSUserDefaults?中?3、使用MJExtension一句話搞定對象歸檔?

一、了解NSUserDefaults以及它可以直接存儲的類型

?

? ? ? NSUserDefaults是一個單例,在整個程序中只有一個實例對象,他可以用于數據的永久保存,而且簡單實用,這是它可以讓數據自由傳遞的一個前提,也是大家喜歡用它保存簡單數據的一個主要原因。? ? ?

? ? ? 使用 NSUserDefaults 存儲自定義對象的最初,我們必須認識NSUserDefaults可以存儲哪一些類型的數據,下面一一列出:

NSUserDefaults支持的數據類型有:NSNumber(NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL.

?

?如果想要將上述數據類型的數據永久保存到NSUserDefaults中去,只需要簡單的操作(一個Value 一個Key ),例如,想要保存一個NSString的對象,代碼實現為:

?

[objc]?view plaincopy
  • //將NSString?對象存儲到?NSUserDefaults?中??
  • ????NSString?*passWord?=?@"1234567";??
  • ????NSUserDefaults?*user?=?[NSUserDefaults?standardUserDefaults];??
  • ????[user?setObject:passWord?forKey:@"userPassWord"];??

  • ??將數據取出也很簡單,只需要取出key 對應的值就好了,代碼如下:

    ?

    [objc]?view plaincopy
  • NSUserDefaults?*user?=?[NSUserDefaults?standardUserDefaults];??
  • ????NSString?*passWord?=?[?user?objectForKey:@"userPassWord"];??

  • 注意:對相同的Key賦值約等于一次覆蓋,要保證每一個Key的唯一性

    值得注意的是:

    ? ? ? ? NSUserDefaults 存儲的對象全是不可變的(這一點非常關鍵,弄錯的話程序會出bug),例如,如果我想要存儲一個?NSMutableArray 對象,我必須先創建一個不可變數組(NSArray)再將它存入NSUserDefaults中去,代碼如下:

    ?

    [objc]?view plaincopy
  • NSMutableArray?*mutableArray?=?[NSMutableArray?arrayWithObjects:@"123",@"234",?nil?nil];??
  • ????NSArray?*?array?=?[NSArray?arrayWithArray:mutableArray];??
  • ??????
  • ????NSUserDefaults?*user?=?[NSUserDefaults?standardUserDefaults];??
  • ????[user?setObject:array?forKey:@"記住存放的一定是不可變的"];??
  • ?

    ?

    取出數據是一樣的,想要用NSUserDefaults中的數據給可變數組賦值

    先給出一個錯誤的寫法:

    [objc]?view plaincopy
  • /*-------------------------錯誤的賦值方法-------------------*/??
  • NSUserDefaults?*user?=?[NSUserDefaults?standardUserDefaults];??
  • ??
  • //這樣寫后,mutableArray?就變成了不可變數組了,如果你要在數組中添加或刪除數據就會出現bug??
  • NSMutableArray?*mutableArray?=?[user?objectForKey:@"記住存放的一定是不可變的"];??

  • 正確的寫法:

    [objc]?view plaincopy
  • /*-------------------------正確的賦值方法-------------------*/??
  • NSUserDefaults?*user?=?[NSUserDefaults?standardUserDefaults];??
  • //可以用alloc?方法代替??
  • NSMutableArray?*mutableArray?=?[NSMutableArray?arrayWithArray:[user?objectForKey:@"記住存放的一定是不可變的"]];??
  • 取出數據是一樣的,想要用NSUserDefaults中的數據給可變數組賦值

    先給出一個錯誤的寫法:

    [objc]?view plaincopy
  • /*-------------------------錯誤的賦值方法-------------------*/??
  • NSUserDefaults?*user?=?[NSUserDefaults?standardUserDefaults];??
  • ??
  • //這樣寫后,mutableArray?就變成了不可變數組了,如果你要在數組中添加或刪除數據就會出現bug??
  • NSMutableArray?*mutableArray?=?[user?objectForKey:@"記住存放的一定是不可變的"];??

  • 正確的寫法:

    [objc]?view plaincopy
  • /*-------------------------正確的賦值方法-------------------*/??
  • ????NSUserDefaults?*user?=?[NSUserDefaults?standardUserDefaults];??
  • ??????
  • ????//可以用alloc?方法代替??
  • ????NSMutableArray?*mutableArray?=?[NSMutableArray?arrayWithArray:[user?objectForKey:@"記住存放的一定是不可變的"]];??
  • 二、使用 NSUserDefaults 存儲自定義對象

    1、將自定義類型轉換為NSData類型

    ?

    ? ? ? 當數據重復而且多的時候(例如想存儲全班同學的學號,姓名,性別(這個數據量可能太大了 )),如果不用SQLite?存儲 (多數據最好還是用這個),你可以選擇使用歸檔,再將文件寫入本地,但是這種方式和?NSUserDefaults?比起來麻煩多了(因為NSFileManage 本來就挺復雜) ,但是問題是,NSUserDefaults?本身不支持自定義對象的存儲,不過它支持NSData的類型,下面舉一個例子來介紹。

    轉載于:https://www.cnblogs.com/HHD-9199/p/8572491.html

    總結

    以上是生活随笔為你收集整理的iOS NSUserDefaults 简介 NSUserDefaults 存储自定义对象的全部內容,希望文章能夠幫你解決所遇到的問題。

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