экземпляр синглтона iphone в примере кода LocateMe - PullRequest
1 голос
/ 21 сентября 2009

Может кто-нибудь объяснить, почему в примере приложения iphone LocateMe найдено одноэлементное представление класса MyCLController здесь

а также переопределение retain, retainCount, release и autorelease? Любая помощь будет принята с благодарностью !!

1 Ответ

5 голосов
/ 21 сентября 2009

Поскольку в приложении всегда требуется только один экземпляр MyCLController.

В этом примере одноэлементная реализация представляет собой модель самообороны. Он переопределяет все другие методы, чтобы предотвратить возможность освобождения экземпляра.

Лично я никогда не проходил через такие обручи (и документация будет изменена в будущем), предпочитая вместо этого использовать мертвый простой метод + sharedInstance:

+ sharedInstance
{
    static id sharedInstance = nil;
    if (!sharedInstance) {
        sharedInstance = [self alloc];
        sharedInstance = [sharedInstance init];
    }

    return sharedInstance;
}

(1) Да, я специально разбил alloc / init. Это позволяет что-либо в вызове метода -init + sharedInstance без проблем.

(2) Нет, это не касается многопоточности. Для этого я использую dispatch_once () GCD. На iPhone вам понадобится немного другой шаблон. @synchronized () работает, но накладные расходы.

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

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