NSAssert буде згенеровано виняток , коли він виходить з ладу. Отже, NSAssert має бути коротким і простим способом писати та перевіряти будь-які припущення, які ви зробили у своєму коді. Це (на мій погляд) не альтернатива виняткам, це просто ярлик. Якщо твердження не вдається, то у вашому коді щось пішло жахливо, і програма не повинна продовжуватися.
Зауважимо одне, що NSAssert не буде компілюватися у ваш код у збірці випуску, тому це зазвичай використовується для перевірки розумності під час розробки. Я насправді використовую власний макрос утвердження, який завжди активний.
Ви могли б використовувати @throw
свій власний NSException , коли ви точно хочете, щоб це було у збірці випуску, і в таких речах, як загальнодоступні бібліотеки / інтерфейс, коли деякі аргументи недійсні або вас викликали неправильно. Зверніть увагу, що це насправді не є звичайною практикою @catch
винятків і продовжуйте запускати свою програму. Якщо ви спробуєте це в деяких стандартних бібліотеках Apple (наприклад, Core Data), можуть статися погані речі. Подібно до твердження, якщо виникає виняток, програма, як правило, повинна закінчуватися досить швидко, оскільки це означає, що десь є помилка програмування.
NSErrors слід використовувати у ваших бібліотеках / інтерфейсах для помилок, які не є помилками програмування і які можна відновити. Ви можете надати інформацію / коди помилок абоненту, і він може чисто обробляти помилку, попереджати користувача, якщо це необхідно, і продовжувати виконання. Це, як правило, стосується таких помилок, як помилка "Файл не знайдений" або якась інша не фатальна помилка.