iOS:NSUserDefaults

  

什么是NSUserDefaults?

NSUserDefaults类用于保存应用程序设置和属性以及用户数据等轻量级数据。例如,你可以存储用户在应用程序中使用的图片或默认颜色方案。这些对象存储在iOS所谓的“defaults系统”中。iOS的defaults系统在整个app中都是可用的,因此存放到defaults系统中的数据也是整个应用程序生命周期中可用的。也就是说,无论用户关闭程序还是关机,在用户再次打开程序或开机后这些数据仍然存在。NSUserDefaults可以存储的数据类型包括:

  • NSData
  • NSString
  • NSNumber
  • NSDate
  • NSArray
  • NSDictionary

如果你想保存其他类型,如UIImage,你应该进行编码(即archive),或者将它转换为NSData、NSNumber或者NSString。注意:密码最好不要存储在NSUserDefaults里,要存储也必须用AES/DES加密存储,更安全的方法是 https://github.com/ldandersen/scifihifi-iphone

把密码存储在NSUserDefault or plist里的后果: http://www.shushao.com/news/info/item/203510-ios

用NSUserDefaults存储的数据下次程序运行的时候依然存在,它把数据存储在什么地方了?如何能够清除?

其实它存储在应用程序内置的一个plist文件里,这个可以根据路径看到。
比如说这个是你的程序沙盒位置
/UsersLibrary/Application Support/iPhoneSimulator/4.1/Applicati*****/29788E40-AF47-45A0-8E92-3AC0F501B7F4/,(这个是应用程序对应在mac上的位置)
这个下面有/Library/Prefereces,里面有个plist文件,存储的就是你的userDefaults,需要注意的是如果程序意外退出,NSUserDefaults standardUserDefaults数据不会被系统写入到该文件,不过可以使用[[NSUserDefaultsstandardUserDefaults] synchronize]命令直接同步到文件里,来避免数据的丢失。
想要删掉的话,用removeObjectForKey或者删掉沙盒,也就是你的应用程序然后重新安装。

代码实现,添加两个文本框,和一个按钮,在一个文本框输入文本,点击按钮,会把文本框内容保存到NSUserDefaults中,然后从NSUserDefaults读出来,输出到另一个文本框:
按钮触发的操作:

//将文本框的内容保存到NSUserDefaults

    NSUserDefaults *savePtb = [NSUserDefaultsstandardUserDefaults];

    [savePtbsetObject:self.textField.textforKey:@"input"];



//读取NSUserDefaults中的数据

    NSUserDefaults *readPtb = [NSUserDefaultsstandardUserDefaults];

    NSString *pstr = [readPtbobjectForKey:@"input"];

    self.self.inputText.text = pstr;



    有时候,我们需要在应用程序第一次打开时做一些事情,可以用NSUserDefaults来判断应用程序是否第一次执行,

可以在

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法利进行判断:


    

    NSUserDefaults *userDF= [NSUserDefaultsstandardUserDefaults];

    NSNumber *number = [userDFobjectForKey:@"H"];


            

    if(number ==nil)//程序第一次执行


    {

        NSUserDefaults *userDF= [NSUserDefaultsstandardUserDefaults];

        [userDF setValue:[NSNumbernumberWithBool:YES]forKey:@"H"];

        [userDFsynchronize];

        要执行的其他代码;

   }

   

   else//程序不是第一次执行

    {

                    其他代码;
                 }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值