首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >目标C:单例模式的使用

目标C:单例模式的使用
EN

Stack Overflow用户
提问于 2011-10-11 19:19:54
回答 4查看 600关注 0票数 0

假设我有一个单例类MySingleton,如下所示。

现在是一个单例类,就像任何其他类一样。我可以拥有非原子的实例变量并保留?

我可以在.h文件中使用:@property (非原子,保留) NSString* instanceVar

并在.m文件中@synthesize instanceVar?

代码语言:javascript
复制
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;
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-11 19:47:07

是的,单例类的实例与标准类的行为相同,只有一个实例。

你的模式太复杂了,不需要+(id)alloc,这里是一个更简单的模式:

代码语言:javascript
复制
@implementation MySingleton
static MySingleton* _sharedMySingleton = nil;

+(MySingleton*)sharedMySingleton
{
    @synchronized([MySingleton class])
    {
        if (!_sharedMySingleton)
            _sharedSingleton = [[MySingleton alloc] init];
    }

    return _sharedMySingleton;
}
票数 1
EN

Stack Overflow用户

发布于 2011-10-11 19:31:10

行!没问题。对于应用程序的其余部分,单例的外观和工作方式与任何其他类一样。唯一的区别是,当你的应用程序试图创建一个新的单例时,它总是收到相同的对象。但是单例可以像任何其他类一样拥有实例方法和实例变量。

票数 1
EN

Stack Overflow用户

发布于 2011-10-11 19:22:56

我不熟悉您提到的注释,因为我是一名C++开发人员,但是单例当然可以有实例数据。这是它的价值之一。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7725201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档