Имеет ли значение позиция классификатора собственности ARC? - PullRequest
3 голосов
/ 14 января 2012

Apple имеет тенденцию приводить примеры, подобные этому:

NSError __strong *error = nil;

или

-(BOOL)performOperationWithError:(NSError * __autoreleasing *)error;

Я бы нашел это более читабельным и логичным, если бы мог сделать это следующим образом:

__strong NSError *error = nil;


-(BOOL)performOperationWithError:(__autoreleasing NSError**)error;

Быстрый тест показал, что компилятор не жалуется на мой способ написания.В любом случае, я делаю это неправильно, или это просто так написать?

Ответы [ 2 ]

4 голосов
/ 15 января 2012

Нет, позиция квалификатора владения не имеет значения вообще. Поскольку квалификаторы владения имеют значение только для типов указатель на объект, ваше намерение никогда не бывает двусмысленным. Компилятор может легко определить ваше намерение независимо от того, где вы его разместите, поэтому ARC сделает именно это.

Если у вас есть доступ к форумам Apple для разработчиков iOS, вы можете увидеть, где я задавал этот же вопрос инженерам Apple, по адресу https://devforums.apple.com/message/458606.

1 голос
/ 14 января 2012

Если компилятор не жалуется, и вы не получаете никаких новых утечек из-за этого, тогда это хорошо. Вы также можете сравнить выходные данные сборки одним способом с другим и посмотреть, есть ли различия (используйте инструмент diff, а не TextEdit, или вы будете в нем всю ночь: P)

Если asm или двоичные файлы одинаковы, компилятор обрабатывает их точно так же. Вы также можете протестировать прибор до и после и посмотреть, есть ли утечки, чтобы убедиться, что он все еще правильно обрабатывает память.

...