我有个单身班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;
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在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]
时,返回的对象已经被正确且唯一地初始化了。