Pull to refresh

Comments 10

А если Ваше приложение много поточное, то могут возникнуть проблемы.
Для их решения лучше сделать так
+(Singleton *) sharedInstance
{
    static Singleton * sharedInstance= nil;
    static dispatch_once_t once_token = 0;
    dispatch_once(&once_token, ^
                  {
                      sharedInstance =  [Singleton  new];
                  });
    return sharedInstance ;
}

так уж точно один раз.
Точно, удивлен что автор так не написал.
А по поводу наследников — нужно использовать instancetype.
Всё хорошо, но на практике полная реализация крайне громоска.
Я использую реализацию без перегрузки управления памятью. Пока ещё никто его внепланово убить не пытался.
еще, вот тут habrahabr.ru/post/198328/#comment_6879124 недавно поговорили о синглтонах.

Кратко, смысл в том, что о синглтоне, как паттерне, надо думать в последнюю очередь.
Описанная вами версия — только для не ARC'овых проектов. Все-таки 2014 год на подходе. Все можно сделать проще и изящнее:
@interface MySingleton : NSObject
+(instancetype) sharedInstance;
// следующие объявления сгенерируют compile time ошибки при попытке их вызвать вручную.
// добавляем -copyWithZone: -allocWithZone: -copy по вкусу
+(instancetype) alloc __attribute__((unavailable("alloc not available, call sharedInstance instead")));
-(instancetype) init __attribute__((unavailable("init not available, call sharedInstance instead")));
+(instancetype) new __attribute__((unavailable("new not available, call sharedInstance instead")));

@end

@implementation MySingleton

+(instancetype) sharedInstance {
    static dispatch_once_t pred;
    static id shared = nil;
    dispatch_once(&pred, ^{
        shared = [[super alloc] initUniqueInstance];
    });
    return shared;
}

-(instancetype) initUniqueInstance {
    return [super init];
}
@end
Ух! Отлично! Спасибо!
Ваш коммент круче всей статьи. Если из нее убрать ненужную воду, которую автор добавил чтобы получить книгу из пальца, получится старое говно времен iOS SDK 3.
Чтобы не было ошибки, ведь мы init сделали выше недоступным для использования в данном классе.
Sign up to leave a comment.

Articles