В чем разница между [Class new] и [[Class alloc] init] в iOS?
Возможный дубликат:
alloc, init и new в Objective-C
Я немного запутался в [Class new]
и [[Class alloc] init]
. Я определил объект content
с помощью [Class new]
и [[Class alloc] init]
.
(1). NSMutableArray *content = [NSMutableArray new];
(2). NSMutableArray *content = [[NSMutableArray alloc] init];
Мой вопрос о различиях между [Class new]
и [[Class alloc] init]
. Для меня (1) и (2) аналогичны. Если (1) и (2) схожи, то почему мы используем [[Class alloc] init]
большую часть времени, по сравнению с [Class new]
? Я думаю, что должна быть какая-то разница.
Просьба объяснить различия, плюсы и минусы обоих?
Ответы
Ответ 1
Alloc: метод класса NSObject. Возвращает новый экземпляр получающего класса.
Init: метод экземпляра NSObject. Реализовано подклассами для инициализации нового объекта (получателя) сразу после выделения памяти для него.
Новое: Классовый метод NSObject. Выделяет новый экземпляр получающего класса, отправляет ему сообщение инициализации и возвращает инициализированный объект.
Релиз: метод экземпляра делегата NSObject. Уменьшает счетчик ссылок получателей.
Авто-релиз: метод экземпляра делегата NSObject. Добавляет получателя в текущий пул автоматического выпуска.
Сохранить: метод экземпляра делегата NSObject. Увеличивает счетчик ссылок получателей.
Copy: метод экземпляра делегата NSObject. Возвращает новый экземпляр, который является копией получателя.
Итак, в заключение можно сказать, что
alloc идет с init
новый = alloc + init
Ответ 2
Метод +new
является просто сокращением для +alloc
и -init
. Семантика собственности идентична. Единственное преимущество использования +new
заключается в том, что оно более кратким. Если вам нужно предоставить аргументы инициализатору класса, вам придется использовать методы +alloc
и -initWith...
.
Ответ 3
Здесь: alloc, init и new в Objective-C
В основном это вопрос современного и традиционного. Наиболее прямым преимуществом init над новым является то, что существует множество пользовательских методов init.