Здесь идет - я перефразировал ваши вопросы:
Что делает [super allocWithZone:NULL]
?
Это то же самое, что сказать [super alloc]
. Часть withZone
связана с тем, где в памяти будет храниться ваш объект. На практике это было бы очень редко, чтобы использовать это. См. Этот вопрос для получения дополнительной информации - В чем разница между alloc и allocWithZone:?
Почему метод retain
возвращает себя (а не увеличивает счетчик сохранения)
Синглтоны поддерживаются в течение всего срока действия вашего приложения - вам не важен счет хранения, потому что нет ситуации, в которой вы хотели бы освободить свой синглтон. retain
возвращает self
в качестве вежливости и соглашения (и для разрешения вложенных выражений).
Если в синглтоне есть несколько переменных экземпляра, где их следует инициализировать?
На ваше усмотрение. Обычно вы инициализируете их в методе init
, как для обычного объекта.