【问题标题】:NSUserDefault , Alloc init vs standard UserdefaultNSUserDefault , Alloc init 与标准 Userdefault
【发布时间】:2016-08-05 13:03:54
【问题描述】:

我很困惑

之间有什么区别

NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];

NSUserDefaults *userDefault = [[NSUserDefaults alloc] init];

谁能帮帮我......

提前

【问题讨论】:

    标签: ios objective-c nsuserdefaults


    【解决方案1】:

    通过standUserDefaults,您正在使用应用程序的sharedInstance。使用 alloc init,您可以使用标识符为新用户设置默认值。当我不得不与我的应用程序的共享扩展共享数据时,我使用过它。我根据我创建的标识符将数据保存在用户默认值中,以便在我的共享扩展项目中访问。

    相信一定有更多的解释,你可以看这里 https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/

    【讨论】:

      【解决方案2】:

      [NSUserDefaults standardUserDefaults] 将使用 Userdefaults 的全局共享实例。

      standardUserDefaults 返回 NSUserDefaults 的全局实例,配置为搜索当前应用程序的搜索列表。

      [[NSUserDefaults alloc]init] 每次都会创建实例。

      最好使用[NSUserDefaults standardUserDefaults]

      【讨论】:

      • 当我阅读 userdefault 时,如果我使用 standradUserDefault 创建,它会存储在 .plist 文件中,因此它可以在应用程序级别访问,如果我使用 alloc init 怎么办,它是否存储在其他位置(不在同一个 plist 文件中)
      • 不,它不会存储在同一个 plist 中。
      【解决方案3】:

      根据 NSUserDefaults.h 的描述,当使用标准用户默认值时,你会得到一个全局的 NSUserDefaults 实例,配置为搜索当前应用的搜索列表。

      同时,如果您使用 alloc init,则需要一个 suitename

      -init 等价于 -initWithSuiteName:nil

      【讨论】:

        【解决方案4】:
        NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
        

        以上行通过使用类为您提供了 单例对象 方法 standardUserDefaults 通过该方法接收的对象在整个应用程序中分配单个内存。

        NSUserDefaults *userDefault = [[NSUserDefaults alloc] init];
        

        这将为您提供新对象,每个对象都分配了不同的 内存并在对象范围完成时释放。

        如果您想在整个应用程序中存储和使用该值,那么最好使用单例对象,当您删除应用程序时该对象将被释放

        【讨论】:

          【解决方案5】:
          NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
          

          这是一个类方法,将返回 NSUserDefaults 的共享实例。因为它是一个共享实例。它是在全局级别存储数据、跨应用程序访问的理想场所。

          NSUserDefaults *userDefault = [[NSUserDefaults alloc] init];
          

          这是一个实例方法,它将初始化分配的 NSUserDefaults 实例。每次调用它时,都会初始化并返回一个新实例,这对于在全局级别存储数据没有用处。因此,在班级内更适合。此外,此实例的生命周期仅在其引用范围存在之前才有效。

          更多信息在这里:Documentation

          要访问模拟器/设备中的标准默认值:link

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-01-23
            • 1970-01-01
            • 2015-06-17
            • 1970-01-01
            • 2011-07-22
            • 1970-01-01
            • 2014-02-20
            • 2012-11-19
            相关资源
            最近更新 更多