假设我有一个单例类MySingleton,如下所示。
现在是一个单例类,就像任何其他类一样。我可以拥有非原子的实例变量并保留?
我可以在.h文件中使用:@property (非原子,保留) NSString* instanceVar
并在.m文件中@synthesize instanceVar?
static MySingleton* _sharedMySingleton = nil;
+(MySingleton*)sharedMySingleton
{
@synchronized([MySingleton class])
{
if (!_sharedMySingleton)
[[self alloc] init];
return _sharedMySingleton;
}
return nil;
}
+(id)alloc
{
@synchronized([MySingleton class])
{
NSAssert(_sharedMySingleton == nil, @"Attempted to allocate a second instance of a singleton.");
_sharedMySingleton = [super alloc];
return _sharedMySingleton;
}
return nil;
}发布于 2011-10-11 19:47:07
是的,单例类的实例与标准类的行为相同,只有一个实例。
你的模式太复杂了,不需要+(id)alloc,这里是一个更简单的模式:
@implementation MySingleton
static MySingleton* _sharedMySingleton = nil;
+(MySingleton*)sharedMySingleton
{
@synchronized([MySingleton class])
{
if (!_sharedMySingleton)
_sharedSingleton = [[MySingleton alloc] init];
}
return _sharedMySingleton;
}发布于 2011-10-11 19:31:10
行!没问题。对于应用程序的其余部分,单例的外观和工作方式与任何其他类一样。唯一的区别是,当你的应用程序试图创建一个新的单例时,它总是收到相同的对象。但是单例可以像任何其他类一样拥有实例方法和实例变量。
发布于 2011-10-11 19:22:56
我不熟悉您提到的注释,因为我是一名C++开发人员,但是单例当然可以有实例数据。这是它的价值之一。
https://stackoverflow.com/questions/7725201
复制相似问题