NSAssert вызовет исключение. Таким образом, NSAssert должен быть коротким и простым способом написания и проверки любых предположений, которые вы сделали в своем коде. Это (на мой взгляд) не альтернатива исключениям, а просто ярлык. Если утверждение не выполняется, значит, в вашем коде что-то пошло не так, и программа не должна продолжаться.
Следует отметить, что NSAssert не будет компилироваться в ваш код в сборке выпуска, поэтому обычно это используется для проверки работоспособности во время разработки. На самом деле я обычно использую настраиваемый макрос assert, который всегда активен.
Время, когда ты будешь @throw
своим исключение NSException , когда вы определенно хотите его использовать в сборке релиза, и в таких вещах, как публичные библиотеки / интерфейс, когда некоторые аргументы недействительны или вы были вызваны неправильно. Обратите внимание, что это не совсем стандартная практика для @catch
исключения и продолжения выполнения вашего приложения. Если вы попробуете это с некоторыми стандартными библиотеками Apple (например, Core Data), могут случиться плохие вещи. Подобно утверждению, если возникает исключение, приложение обычно должно завершаться довольно быстро, потому что это означает, что где-то есть ошибка программирования.
NSErrors следует использовать в ваших библиотеках / интерфейсах для ошибок, которые не являются ошибками программирования и которые можно исправить. Вы можете предоставить вызывающей стороне информацию / коды ошибок, и они смогут аккуратно обработать ошибку, при необходимости предупредить пользователя и продолжить выполнение. Обычно это происходит из-за таких вещей, как ошибка «Файл не найден» или какая-либо другая нефатальная ошибка.