Подтвердить что ты не робот

В чем разница между [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]? Я думаю, что должна быть какая-то разница.

Просьба объяснить различия, плюсы и минусы обоих?

4b9b3361

Ответ 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.