Использование выделения init вместо нового

Это не исключение, потому что это узкий контракт.

Если вы попытаетесь pop_back пустой вектор, поведение не определено, и реализация в режиме отладки вполне может выбрать исключение.

Деструкторы, вызываемые стандартной библиотекой, не должны выбрасывать, опасаясь неопределенного поведения.

337
задан Qantas 94 Heavy 2 May 2014 в 23:56
поделиться

3 ответа

Существует набор причин здесь: http://macresearch.org/difference-between-alloc-init-and-new

Некоторые выбранные:

  • new не поддерживает пользовательские инициализаторы (как initWithString)
  • alloc-init является более явным, чем new

Общее мнение, кажется, что необходимо использовать то, чем Вы довольны.

286
ответ дан Paulo Mattos 23 November 2019 в 00:39
поделиться

+new эквивалентно +alloc/-init в Apple NSObject реализация. Очень маловероятно, что это будет когда-либо изменяться, но в зависимости от Вашего уровня паранойи, документации Apple для +new кажется, допускает изменение реализации (и повреждение эквивалентности) в будущем. Поэтому, потому что "явный лучше, чем неявный" и для исторической непрерывности, сообщество Objective C обычно избегает +new. Можно, однако, обычно разыскивать недавних посетителей Java к Objective C их упорным использованием +new.

52
ответ дан Barry Wark 23 November 2019 в 00:39
поделиться

Часто, Вы испытываете необходимость для передачи аргументов init и таким образом, Вы будете использовать другой метод, такой как [[SomeObject alloc] initWithString: @"Foo"]. Если Вы привыкли писать это, Вы привыкаете делать его этот путь и так [[SomeObject alloc] init] может прибыть более естественно это [SomeObject new].

8
ответ дан Brian Campbell 23 November 2019 в 00:39
поделиться