我想创建一些类型的对象或类,它存储我在应用程序中的某个位置从服务器获得的一大堆变量。然后我想让这个对象或类可用于整个项目,以便我可以使用甚至更新这个对象或类的变量。
我不知道从哪里开始,因为我甚至不确定它是否可能。
目前我遇到的问题是我所有这些对象都围绕不同的类传递数据,而且我几乎将这些对象嵌套,并且跟踪这些代码变得非常低效。但是,如果我有一些类型的课程,我可以从任何地方访问所有的值,这将使我的生活更轻松。
非常感谢任何帮助或建议。如果您需要更多信息,请告诉我。
答案 0 :(得分: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];
时获得相同对象的每一次
答案 1 :(得分:2)
单身是可行的方式。
+(SharedClass *) sharedHelper {
static sharedClass *sharedInstance = nil;
static dispatch_once_t pred;
dispatch_once(&pred, ^{
sharedInstance = [sharedClass alloc];
sharedInstance = [sharedInstance init];
});
return sharedInstance;
}
答案 2 :(得分:2)
我建议创建一个数据容器单例。单例是一个在项目生命周期内只创建一次的对象。它有一个类方法,可以让你请求对象。
搜索“Cocoa singleton design pattern”以了解更多信息。
您可能有一个MyDataObject类,它可能有一个类方法sharedDataObject。 .m文件的内容可能如下所示:
@implementation MyDataObject
static _sharedDataObject;
+(MyDataObject) sharedDataObject
{
if (!_sharedDataObject)
_sharedDataObject = [[MyDataObject alloc] init];
return _sharedDataObject;
}
@end
然后,您只需根据需要向数据对象的标头添加属性。在您需要的任何地方,#导入其他类中数据对象的标头,然后使用如下代码:
//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”
开头答案 3 :(得分:0)
Singleton是一个很好的模式,用于在程序中创建一个单例对象,用于不与其他单例交互的对象。 如果您有许多具有复杂性交互的单例对象,则应该可以更好地控制对象的创建。 您可以使用AppDelegate,并在ApplicationDidFinishLaunching中创建Singletons作为AppDelegate的字段。 或者,您可以创建一个Singleton对象,该对象将包含其他对象,并将创建具有必要逻辑的其他对象。