Ios 一般设计-我在哪里放置集中访问的对象
我有我的主应用程序代理 我有几个UIViewController派生的实例是由故事板驱动的 假设我想为我的应用程序提供一个集中的持久性层——可能是SQLite的核心数据。我应该把这些东西放在哪里?我缺少一些您可以从所有UIViewController实例访问的可集中访问的“应用程序”类 这里有模式吗?您应该检查: 在软件工程中,单例模式是一种设计模式 它将类的实例化限制为一个对象。这是 仅当需要一个对象来跨多个对象协调操作时非常有用 系统。这个概念有时被推广到 当仅存在一个对象或限制 对一定数量的对象进行实例化。这个词来自 单子的数学概念 以下是示例实现的源代码: 这是现代解决方案的直接链接:Ios 一般设计-我在哪里放置集中访问的对象,ios,Ios,我有我的主应用程序代理 我有几个UIViewController派生的实例是由故事板驱动的 假设我想为我的应用程序提供一个集中的持久性层——可能是SQLite的核心数据。我应该把这些东西放在哪里?我缺少一些您可以从所有UIViewController实例访问的可集中访问的“应用程序”类 这里有模式吗?您应该检查: 在软件工程中,单例模式是一种设计模式 它将类的实例化限制为一个对象。这是 仅当需要一个对象来跨多个对象协调操作时非常有用 系统。这个概念有时被推广到 当仅存在一个对象或限制 对一定数量
您所描述的是您的模型层。管理模型的主要方法有两种:
- 在应用程序启动时,创建主模型对象并将其交给第一个视图控制器
- 使主模型对象成为单例对象
PersonManager
,如果您有一堆Person
对象。此对象将从持久性存储中提供模型对象(通常是核心数据)
这里使用单例的优点是,它更容易实现,而且您不必绕过经理。非单例的优点是(对于基于文档的系统)更容易拥有多个单例,并且比单例更容易对非单例进行测试和推理。也就是说,我的项目中大约有80%使用单例模型管理器
作为旁注,您似乎已经理解了:永远不要将模型存储在应用程序委托中,永远不要将应用程序委托用作到达模型的“集合点”。也就是说,永远不要在应用程序委托上使用
sharedModel
方法。如果您发现自己在代码中的任何地方调用[[UIApplication sharedApplication]delegate]
,那么您几乎总是在做错事。挂起应用程序委托上的数据会使代码重用变得极其困难。使用单例模式,它具有应用程序生命周期的范围
@interface DataManager ()
@end
#pragma mark -
@implementation DataManager
#pragma mark - Shared Instance
static DataManager* sharedInstance = nil;
#pragma mark - Singleton Methods
- (id)init
{
self = [super init];
if (self) {
// Initialization code here.
}
return self;
}
+ (DataManager*)sharedInstance
{
@synchronized([DataManager class])
{
if (!sharedInstance) {
//[[self alloc] init];
sharedInstance = [[DataManager alloc] init];
}
return sharedInstance;
}
return nil;
}
+ (id)alloc
{
@synchronized([DataManager class])
{
NSAssert(sharedInstance == nil, @"Attempted to allocate a second instance \
of a singleton.");
sharedInstance = [super alloc];
return sharedInstance;
}
return nil;
}
@end
在.h文件中声明属性,并在.m文件中合成它们
要使用该属性,只需调用:
// set value
[[DataManager sharedInstance] setSharedProperty:@"ABC"]; // If its a string
// get Value
NSLog(@"value : %@", [[DataManager sharedInstance] sharedProperty]);
希望这是你所需要的
喜欢编码:)这正是我应该写的。更现代的实现使用GCD的dispatch_once函数。不过,仅供参考,相关问题已经过时了。最好的答案(
dispatch\u once
)就隐藏在列表的下面。是的,这是真的,但我认为他需要一个单例模型类来存储一些全局数据。完全同意(嗯,大约80%的时间…:我想我的答案是另一个常见的解决方案)。这就是我所指的隐藏在列表中的那个。我建议对过时的答案投反对票,但那太卑鄙了。:)当他们被写的时候,他们是完全合适的。