Имеет ли смысл этот шаблон синглтона? - PullRequest
1 голос
/ 17 июня 2010
@implementation MySingletonClass
static MySingletonClass *sharedInstance = nil;


+ (MySingletonClass*)sharedInstance {
    @synchronized(self) {
        if (sharedInstance == nil) {
            sharedInstance = [[self alloc] init];
        }
    }
    return sharedInstance;
}

+ (id)alloc {
    @synchronized(self) {
        if (sharedInstance == nil) {
            sharedInstance = [super alloc];
            return sharedInstance; 
        }
    }
    return nil; 
}

+ (id)allocWithZone:(NSZone *)zone {
    @synchronized(self) {
        if (sharedInstance == nil) {
            sharedInstance = [super allocWithZone:zone];
            return sharedInstance; 
        }
    }
    return nil; 
}

-(id)init {
    self = [super init];
    if (self != nil) {
        // initialize stuff here
    }

    return self;
}

@end

Не уверен, что можно перезаписать alloc и allocWithZone: вот так ...?

Ответы [ 3 ]

2 голосов
/ 17 июня 2010

Взгляните на этот шаблон Singleton.Я использовал это (однажды, ха-ха! Получите шутку), и это работало очень хорошо.

http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html

1 голос
/ 17 июня 2010

Вам не нужно переопределять alloc, потому что реализация по умолчанию вызывает allocWithZone:

Кроме этого, вам, вероятно, нужно переопределить некоторые другие методы. Подробнее см. Apple Docs .

0 голосов
/ 15 декабря 2010

Я также использовал шаблон cocoawithlove во многих проектах; ответ Википедии тоже хорошо.Как всегда, помните, документация Apple - это хорошее руководство о том, как их фреймворки и приложения создаются с помощью одноэлементных классов.

Только что нашел эту реализацию на github ;попробовал, и работает хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...