В чем разница между [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]? Я думаю, что должна же быть какая-то разница.
Пожалуйста, объясните различия, плюсы и минусы обоих?
3 ответов:
распределение : метод класса NSObject. Возвращает новый экземпляр получающего класса.
Init : метод экземпляра NSObject. Реализовано подклассами для инициализации нового объекта (приемника) сразу после выделения памяти для него.
New : метод класса NSObject. Выделяет новый экземпляр получающего класса, отправляет ему сообщение init и возвращает инициализированный экземпляр объект.
релиз : метод экземпляра делегата NSObject. Уменьшает количество ссылок получателя.
Autorelease : метод экземпляра делегата NSObject. Добавляет получателя в текущем autorelease пул.
сохранить: метод экземпляра делегата NSObject. Увеличивает счетчик ссылок приемника.
копия : метод экземпляра делегата NSObject. Возвращает новый экземпляр, который копия приемника.
Итак, в заключение мы можем сказать, что
alloc идет с init
new = alloc + init
The
+newметод просто сокращенно для+allocи-init. Семантика владения идентична. Единственное преимущество использования+newЭто то, что он более лаконичен. Если вам нужно предоставить аргументы инициализатору класса, вам придется использовать+allocи методы.
здесь: alloc, init и new в Objective-C
в основном это вопрос современного против традиционного. Самое прямое преимущество init над new заключается в том, что существует много пользовательских методов init.
Comments