我有以下代码:
{
NSObject *_object;
}
- (instancetype)init {
if (self = [super init]) {
_object = [[NSObject alloc] init];
}
return self;
}
- (NSObject*)object {
return _object;
}
如果在object
完成并返回后从第二个帖子调用方法init
,我怎么知道_object
中init
的分配是可见的,它实际上并没有返回一个未分配的指针?
保证这一点的内部机制是什么?
答案 0 :(得分:3)
代码的线程安全性取决于它的使用方式,以及如何使用它本身就是线程安全的。你不应该绕过部分构造的对象,因此分配和初始化([[... alloc] init]
或new
)应该被限制在一个线程中,然后传递给其他线程。
答案 1 :(得分:1)
使用dispatch_once
。无论有多少线程,这都保证只运行一次。例如
+ (MyClass *)sharedInstance
{
// Static local predicate must be initialized to 0
static MyClass *sharedInstance = nil;
static dispatch_once_t onceToken = 0;
dispatch_once(&onceToken, ^{
sharedInstance = [[MyClass alloc] init];
// Do any other initialisation stuff here
});
return sharedInstance;
}