我想创建某种类型的对象或类,用于存储我在应用程序中某个点从服务器获得的一大堆变量。然后,我想使此对象或类可用于整个项目,以便我可以使用甚至更新此对象或类的变量。
我不知道从哪里开始,因为我什至不确定是否有可能。
目前我面临的问题是我让所有这些对象在不同的类之间传递数据,我几乎嵌套了这些对象,跟踪这些代码的效率变得非常低。但是,如果我有某种类型的类,我可以从任何地方访问所有最新的值,这将使我的生活更加轻松。
您需要创建一个通过以下内容访问的对象:
+ (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 对象,该对象将包含其他对象,并将创建具有必要逻辑的其他对象。