Я хотел бы использовать подход GCD для использования общих экземпляров для следующего шага, поэтому я создал следующий код:
@implementation MyClass
static id sharedInstance;
#pragma mark Initialization
+ (instancetype)sharedInstance {
static dispatch_once_t once;
dispatch_once(&once, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
- (instancetype)init {
if (sharedInstance) {
return sharedInstance;
}
@synchronized(self) {
self = [super init];
if (self) {
sharedInstance = self;
}
return self;
}
}
@end
Я предполагаю, что метод sharedInstance
выглядит нормально, но я не уверен в методе init. Причина этого заключается в том, что я не хочу, чтобы люди использовали мой SDK, чтобы использовать метод init, и если они это сделают... сделайте это доказательством пули.