Поскольку в приложении всегда требуется только один экземпляр 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 () работает, но накладные расходы.
Одна из причин, по которой я нахожу модель самообороны сбивающей с толку, заключается в том, что, честно говоря, если у вас есть одноэлементный класс, и вы заставляете его освобождаться из-за чрезмерного выпуска, ваш код нарушается и такого рода ошибка не должна быть скрыта Во всяком случае, код должен катастрофически потерпеть неудачу. Кроме того, существует ряд ситуаций, в которых одноэлементный класс также может быть допустимым для отдельных экземпляров.