如何在 Objective-c 中创建可供所有其他类使用的全局对象类



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

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

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

您需要创建一个通过以下内容访问的对象:

+ (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];时都会获得相同的对象

单例是要走的路。

+(SharedClass *) sharedHelper {
    static sharedClass *sharedInstance = nil;
    static dispatch_once_t pred;
    dispatch_once(&pred, ^{
        sharedInstance = [sharedClass alloc];
        sharedInstance = [sharedInstance init];
    });
    return sharedInstance;
}

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

搜索"可可单例设计模式"以找到更多关于它的信息。

您可能有一个类 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"开头。

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

最新更新