3

我想创建某种类型的对象或类来存储我在应用程序的某个时间点从服务器获取的一大堆变量。然后我想让这个对象或类对整个项目可用,以便我可以使用甚至更新这个对象或类的变量。

我不知道从哪里开始,因为我什至不确定它是否可能。

目前我面临的问题是我让所有这些对象在不同的​​类周围传递数据,并且我几乎嵌套了这些对象,并且跟踪此代码变得非常低效。但是,如果我有某种类型的类,我可以从任何地方访问所有最新的值,这将使我的生活更轻松。

任何帮助或建议将不胜感激。如果您需要更多信息,请告诉我。

4

4 回答 4

3

您需要创建一个可以通过以下方式访问的对象:

+ (MySingleton *)sharedMySingleton
{
  static dispatch_once_t shared_initialized;
  static MySingleton *shared_instance = nil;

  dispatch_once(&shared_initialized, ^ {
    shared_instance = [[MySingleton alloc] init];
  });

  return shared_instance;
}

正如评论所说,这是一个单例模式。第一次访问对象时,它会被创建,然后每次调用时都会获得相同的对象[MySingleton sharedMySingleton];

于 2013-10-24T01:21:20.843 回答
2

单例是要走的路。

+(SharedClass *) sharedHelper {
    static sharedClass *sharedInstance = nil;
    static dispatch_once_t pred;

    dispatch_once(&pred, ^{
        sharedInstance = [sharedClass alloc];
        sharedInstance = [sharedInstance init];
    });
    return sharedInstance;
}
于 2013-10-24T01:22:13.053 回答
2

我建议创建一个数据容器单例。单例是在项目生命周期中创建一次且仅一次的对象。它有一个类方法,可以让您请求对象。

搜索“可可单例设计模式”以了解更多信息。

您可能有一个 MyDataObject 类,它可能有一个类方法 sharedDataObject。.m 文件的内容可能如下所示:

@implementation MyDataObject
static _sharedDataObject;

+(MyDataObject) sharedDataObject
{
  if (!_sharedDataObject)
    _sharedDataObject = [[MyDataObject alloc] init];
  return _sharedDataObject;
}

@end

然后,您只需根据需要将属性添加到数据对象的标头。在您需要的任何地方,#import 其他类中数据对象的标头,然后使用如下代码:

//To store a value to a property in the shared data object:
[MyDataObject sharedDataObject].someProperty = someValue;

//To fetch a value:
someValue = [MyDataObject sharedDataObject].someProperty;

如果您需要共享数据对象的内容持久化,您可以使共享数据对象符合 NSCoding,然后在您的应用转移到后台时将其内容保存到文件中,并在启动时从文件中加载其内容。

注意 Cocoa 和 Cocoa touch 使用了很多单例对象。NSUserDefaults 是一个单例,NSFileManager 也是。单例的提示是使用类方法返回单个对象。通常在 Apple 的框架中,类方法的名称会以“shared”或“default”开头

于 2013-10-24T01:31:47.317 回答
0

单例是在程序中创建一个单例对象的好模式,用于不与其他单例交互的对象。如果您有许多具有复杂交互的单例对象,您应该对对象的创建有更多的控制。您可以使用您的 AppDelegate,并在 ApplicationDidFinishLaunching 中创建单例作为 AppDelegate 的字段。或者您可以创建一个 Singleton 对象,该对象将包含其他对象并创建具有必要逻辑的其他对象。

于 2013-10-24T04:14:49.970 回答