【问题标题】:Declaring Global Variables with a Singleton in Objective-C [closed]在Objective-C中用单例声明全局变量[关闭]
【发布时间】:2012-08-27 04:41:38
【问题描述】:

我正在寻找在我的所有类中全局存储和读取变量的最佳方式。我知道我可以使用“单例”,但是我不确定这是否是存储变量的最佳方法或如何准确地执行此操作?

【问题讨论】:

    标签: iphone variables save global-variables global


    【解决方案1】:

    我使用单例,我是这样做的:

    创建一个新类,为了演示,我们将其命名为MyDataModel。在 MyDataModel.h 中执行以下操作:

    #import <Foundation/Foundation.h>
    
    @interface MyDataModel : NSObject
    {
        NSString *myStringVariable;
        NSUInteger myIntVariable;
        //add any variables you need
    }
    
    @property (nonatomic, retain) NSString *myStringVariable;
    @property (nonatomic) NSUInteger myIntVariable;
    
    + (MyDataModel *) sharedInstance;
    
    @end
    

    现在在 MyDataModel.m 中执行:

    #import "MyDataModel.h"
    
    @implementation MyDataModel
    
    @synthesize myStringVariable, myIntVariable;
    
    static MyDataModel *_sharedInstance;
    
    + (MyDataModel *) sharedInstance
    {
        if(!_sharedInstance)
        {
            _sharedInstance = [[MyDataModel alloc] init];
        }
        return _sharedInstance;
    }
    
    @end
    

    现在在任何类中你想使用这个单例你必须#import这个类,这里​​是如何使用变量:

    [MyDataModel sharedInstance].myStringVariable = @"anyThing";
    [MyDataModel sharedInstance].myIntVariable = 123;
    

    我希望这可以为您澄清一些事情。

    【讨论】:

    • 我假设这些变量和普通变量一样。我将如何保存它们,以便当用户返回时它们保持不变?我在想“NSUserdefaults”将是最好的选择。
    • 要决定保存的“最佳选择”,我们必须知道数据类型和数量。如果你说它们是正常的,那么是的,NSUserdefaults 是一个很好的选择,因为它使用简单。另一种选择可能是磁盘上的普通文件,您将要保存的内容放入数组和[array writeToFile:filePath atomically:YES];。还有其他选项,例如 SQLite3 数据库,但是当您有大量数据要存储时,请确保使用它......所以数据的类型和数量决定了。
    • 我总共只有大约 7 个变量,所以我认为 NSUserDefaults 在这种情况下会适合我。
    • 另外澄清一下,最后两段代码是设置变量的值,对吗?如果是这样,我该如何简单地阅读这些内容,就像它是普通字符串或 int 一样。
    • 7个变量不多,所以NSUserDefaults应该没问题。从这些变量中读取与写入相同:anotherString = [MyDataModel sharedInstance].myStringVariable;anotherInteger = [MyDataModel sharedInstance].myIntVariable;。我希望我正确理解了你的评论。如果它解决了您的问题,请考虑将此答案设置为正确,以便其他读者知道此答案是您问题的解决方案。
    【解决方案2】:

    您可以使用 NSUserDefaults、AppDelegate 中的变量(不建议)或单例。 我总是在我的应用程序中创建一个单例来存储各种变量和方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多