开发者社区 问答 正文

如何检查单例对象是否已在目标C中初始化?

我有个单身班Objective C .
..在访问之前,我想知道共享对象是否已经初始化了。sharedInstance
...我怎样才能这样做呢?

+ (id)sharedInstance {
    static MyObject *sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[self alloc] init];
    });
    return sharedInstance;
}
- (id)init {
    if (self = [super init]) {}
    return self;
}

展开
收起
游客5akardh5cojhg 2019-12-05 16:12:29 399 分享 版权
阿里云 AI 助理回答

在Objective-C中,确保共享对象仅被初始化一次,通常使用dispatch_once函数来实现。您已经部分写出了这个模式。下面是一个完整的示例,展示如何正确实现单例模式(Singleton Pattern)以确保sharedInstance只被初始化一次:

#import <Foundation/Foundation.h>

@interface MyObject : NSObject

+ (instancetype)sharedInstance;

@end

@implementation MyObject

+ (instancetype)sharedInstance {
    static MyObject *sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[self alloc] init];
        // 在这里可以添加额外的初始化代码
    });
    return sharedInstance;
}

@end

在这个例子中,dispatch_once(&onceToken, ^{...})保证了其块内的代码只会被执行一次,无论多少线程同时尝试访问sharedInstance。这样,您就可以确信当您调用[MyObject sharedInstance]时,返回的对象已经被正确且唯一地初始化了。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: