我一直在阅读来自http://getsetgames.com/2009/08/30/the-objective-c-singleton/的Objective-c单例示例。 .m代码看起来像
+(MySingleton*)sharedMySingleton{
@synchronized([MySingleton class])
{if (!_sharedMySingleton)
if(!_sharedMySingleton)
return _shareMySingleton;
}
....
-(id)init{
self = [super init];
if(self != nil){}
return self;
}
....
感谢您的示例,但我有一个困惑的地方,在您的代码中,我想知道static MySingleton* _sharedMySingleton
初始化的位置。例如,如果我们必须有一些像
-(id)init{
self = [super init];
if(self != nil){
_sharedMySingleton = self
}
return self;
}
答案 0 :(得分:1)
您误删了错误发布的链接中的部分代码。
@implementation MySingleton
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;
}
-(id)init {
self = [super init];
if (self != nil) {
// initialize stuff here
}
return self;
}
-(void)sayHello {
NSLog(@"Hello World!");
}
@end
查看您询问的帖子中的代码实际上是有意义的。
他在静态方法+(MySingleton*)sharedMySingleton
中所做的是他正在检查_sharedMySingleton
对象是否具有他正在返回的值,如果没有它被初始化。
alloc方法是设置单例对象的方法,它不在初始化程序中设置。从技术上讲,它是相同的,因为它将指向同一个对象,该对象将在稍后初始化。
我希望这能澄清你的困惑。
答案 1 :(得分:0)
你可以使用来自http://code.google.com/p/google-toolbox-for-mac/source/browse/trunk/Foundation/GTMObjectSingleton.h的宏,它很容易使用
在实施文件(m)
中GTMOBJECT_SINGLETON_BOILERPLATE(ClassName, sharedInstance)
和头文件
+ (ClassName *) sharedInstance;