IOS / Objective-C; Использование оператора Return в логике if else для завершения метода - PullRequest
0 голосов
/ 27 августа 2018

У меня есть сложная вложенная логика if else в методе login и join. Если что-то пойдет не так, например, неправильный пароль, отсутствие интернета и т. Д., Я выдаю предупреждение. В большинстве случаев единственный вариант - нажать ОК.

Поскольку предупреждения не мешают выполнению кода, я стараюсь поместить эти предупреждения в тупик условного кода, чтобы больше не выполнялся код. Однако, учитывая сложность вложенной логики, чтобы быть в безопасности, я бы хотел немедленно завершить метод. Насколько я понимаю, прерывание работает только в циклах или операторах switch.

Может возврат; оператор безопасно помещается в любом месте метода, чтобы выйти из метода? Я не смог найти это в Apple docs.

if ([hasInternet isEqual:@0]) { 
[self fireAlertNoInternet];
return;      
}

Спасибо за любые разъяснения.

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Может возврат; оператор безопасно помещается в любом месте метода, чтобы выйти из метода? Я не смог найти это в Apple docs.

Да, вы можете безопасно вернуться из любого места внутри метода. Например, оператор return в теле условия или цикла не является проблемой. Тем не менее, вы должны быть осторожны, чтобы привести себя в порядок перед возвращением. Это не так важно для ARC, как для ручного управления памятью, но если вы выделили память с помощью malloc(), вам может потребоваться освободить ее или убедиться, что что-то вне метода имеет ссылку на этот новый блок. Если вы получили какие-либо блокировки, вам, вероятно, нужно снять их. По сути, любые ресурсы, полученные вашим методом, должны быть освобождены или утилизированы до того, как вы вернетесь раньше.

Вам также нужно быть осторожным, чтобы возвращать значение соответствующего типа, если объявлен метод или функция, возвращающая что-то отличное от void.

Я не смог найти это в документации Apple.

Это потому, что поведение return унаследовано от C и C ++ - оно не специфично для Apple или Objective-C.

0 голосов
/ 27 августа 2018

Конечно может, return предназначен для выхода из выполнения функции либо с возвращенным значением, либо без (недействительным) в зависимости от необходимого случая

...