Що таке NSParameterAssert?


Відповіді:


115

Це простий спосіб перевірити, nilчи не є параметр методу рівним чи ні 0. Отже, в основному ви використовуєте його для створення передумови, заявляючи, що якийсь параметр повинен бути встановлений. Якщо його не встановлено, макрос призводить до переривання програми та генерує помилку на цьому рядку. Тому:

- (void)someMethod:(id)someObjectThatMustNotBeNil
{
  // Make sure that someObjectThatMustNotBeNil is really not nil
  NSParameterAssert( someObjectThatMustNotBeNil );
  // Okay, now do things
}

Попередні умови - це простий спосіб забезпечити, щоб програміст правильно викликав методи / API. Ідея полягає в тому, що якщо програміст порушує передумову, програма припиняється достроково - сподіваємось, під час налагодження та базового тестування.

NSParameterAssert може використовуватися для перевірки того, що будь-який вираз вважає істинним, однак, ви можете використовувати його і так:

NSParameterAssert( index >= 0 ); // ensure no negative index is supplied

Документація Apple для макросу NSParameterAssert ()


1
Переконайтеся, що ви виявили винятки у своєму коді, інакше, якщо Assert відповідає дійсності, це призведе до збою програми.
lucius

14
@lucius: Твердження не повинні використовуватися для перевірки умов у розподіленому додатку, вони там виявляють помилки під час розробки. Причинення аварійного завершення роботи у поганому стані (наприклад, від’єднана розетка до Nib) замість того, щоб мовчки провалитися, дозволяє виявити проблеми на ранніх термінах. Багато людей вимикають їх під час розповсюдження за допомогою макросів або #ifdefs.
Бред Ларсон

5
@lucius - Мета полягає в тому, щоб застосувати програму до переривання, коли не виконуються передумови. Це дозволяє програмісту одразу зрозуміти, що він / вона зробив щось не так. Щоб переконатися, що твердження в какао не оцінюються, ви можете визначити макрос NS_BLOCK_ASSERTIONS. Це їх відключає, але ідея полягає в тому, щоб уникнути виконання побічних ефектів або уповільнення коду, а не захисту від збою - шляхом виробництва, твердження ніколи не повинні запускатись при правильному використанні.
Джейсон Коко

1
Чи можна видалити ці твердження простим способом, будуючи виробничі збірки. IMHO їх найкраще використовувати під час розробки для виявлення помилок програмування (як зазначено у коментарі вище).
Йохан Карлссон,

5
@JohanKarlsson Це можливо і встановлено за замовчуванням у поточних версіях шаблонів (це досить далеко) у Releaseконфігурації. Ви можете керувати цим, встановивши параметри ENABLE_NS_ASSERTIONSзбірки в новіших версіях Xcode, або визначивши NS_BLOCK_ASSERTIONSмакрос і встановивши його на 1. У Xcode 5 є параметр проекту * Enable Foundation Assertions`, який встановлює параметри збірки та за замовчуванням Yesв Debugі Noв Releaseконфігурації.
Джейсон Коко,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.