zoukankan      html  css  js  c++  java
  • iOS中的数据存储方式_Preference(NSUserDefaults)

    NSUserDefaults适合存储轻量级的本地数据,项目中,我会把一些简单的数据密码、网址、登陆状态BOOL、整型/浮点型数据等和用户有关的数据用它存储。但是它不能存储自定义的对象!

    实例化一个 NSUserDefaults 对象:

    /**
     *  @brief 创建app整个生命周期内的唯一示例对象
     *
     */
    + (NSUserDefaults *)standardUserDefaults;
    
    /**
     *  @brief 释放之前的 NSUserDefaults 对象且置为 nil。而且之前设置的 KVO 全部不在存在。
     */
    + (void)resetStandardUserDefaults;

    获取Value值:

    /**
     根据指定的key值获取字符串 等同于 - (nullable id)objectForKey:(NSString *)anAttribute; (它会把 NSNumber转为 NSString)
     */
    - (nullable NSString *)stringForKey:(NSString *)defaultName;
    
    /// -arrayForKey: is equivalent to -objectForKey:, except that it will return nil if the value is not an NSArray.
    
    /**
     根据key值获取数组(等同于 - (nullable id)objectForKey:(NSString *)anAttribute;)
     */
    - (nullable NSArray *)arrayForKey:(NSString *)defaultName;
    
    /**
     根据key值获取字典(等同于 - (nullable id)objectForKey:(NSString *)anAttribute;)
     */
    - (nullable NSDictionary<NSString *, id> *)dictionaryForKey:(NSString *)defaultName;
    - (nullable NSData *)dataForKey:(NSString *)defaultName;
    - (nullable NSArray<NSString *> *)stringArrayForKey:(NSString *)defaultName;
    
    
    /** 
     根据key值获取整型(等同于 - (nullable id)objectForKey:(NSString *)anAttribute;)
     如果 value 是 NSNumber 类型,它自动把 value 转为 NSInteger 返回;
     如果 value 是 NSString 类型,它可能把 value 转为 NSInteger 返回;
     如果 value 是 bool 类型, 它会转换(YES转为1;NO转为0)返回;
     如果 value 不存在或不能被转换成一个整数,它会返回0。
     */
    - (NSInteger)integerForKey:(NSString *)defaultName;
    
    /** 
     只会返回 float 值,且内部不会做任何转换(若 value 为 bool,内部不会转换)
     */
    - (float)floatForKey:(NSString *)defaultName;
    
    /**
     只会返回double值,且内部不会做任何转换(若value为boolean,也不会转换)
     */
    - (double)doubleForKey:(NSString *)defaultName;
    
    /*!
     -boolForKey: is equivalent to -objectForKey:, except that it converts the returned value to a BOOL. If the value is an NSNumber, NO will be returned if the value is 0, YES otherwise. If the value is an NSString, values of "YES" or "1" will return YES, and values of "NO", "0", or any other string will return NO. If the value is absent or can't be converted to a BOOL, NO will be returned.
     
     */
    
    /**
     根据key值获取bool值(等同于 - (nullable id)objectForKey:(NSString *)anAttribute;)
     如果 value 是 NSNumber 类型 或 value 为 0,返回NO
     如果 value 是 NSString类型的“YES”“1”,返回NO;其他任何字符串将返回NO;
     如果 value 不存在或不能被转换成一个整数,它会返回NO。
     */
    - (BOOL)boolForKey:(NSString *)defaultName;
    
    
    /**
     根据key值获取NSURL(等同于 - (nullable id)objectForKey:(NSString *)anAttribute;)
     如果 value 是字符串路径,将会被构建为 URL路径;
     如果 value 是被归档的 URL 它将被反归档;
     如果 value 不存在或不能被转换成一个整数,它会返回 nil。
     */
    - (nullable NSURL *)URLForKey:(NSString *)defaultName;

    设置(存储)Value:

    - (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName;
    - (void)setFloat:(float)value forKey:(NSString *)defaultName;
    - (void)setDouble:(double)value forKey:(NSString *)defaultName;
    - (void)setBool:(BOOL)value forKey:(NSString *)defaultName;
    - (void)setURL:(nullable NSURL *)url forKey:(NSString *)defaultName;

    删除key对应的值:

    - (void)removeObjectForKey:(KeyType)aKey;

    NSUserDefaults的值改变的通知:

    FOUNDATION_EXPORT NSString * const NSUserDefaultsDidChangeNotification;

    不会具体指导哪个key-value值改变了。

    只要我们操作了NSUserDefaults,必须进行数据的同步,否则我们无法获取最新的数值:

    - (BOOL)synchronize;

    参考文档:

    NSUserDefaults Class Reference

  • 相关阅读:
    C#基础概念二十五问
    Jpage分页 通用.net2.0分页程序
    使用ADO.net转换数据到Excel格式并提供下载
    .Net中FckEditor的配置和使用方法(含示例源码)
    利用Wildcard ISAPI Mapping隐藏扩展名[转]
    写简历最易犯五大愚蠢错误
    程序员35岁前成功的12条黄金法则
    目前较为流行的Ajax框架一览
    身份证的验证(支持15位与18位)
    使用ISAPI_Rewrite对asp.net实现URL重写伪静态
  • 原文地址:https://www.cnblogs.com/xiu619544553/p/5367662.html
Copyright © 2011-2022 走看看