Утверждать вне try / catch в obj-c - PullRequest
0 голосов
/ 28 марта 2012

Сегодня я думаю, что мог бы кое-что выучить (не уверен), я на самом деле не программист на obj-c, больше типа php и java, но создание приложения для iPhone вместе с кем-то дало мне это, так что, надеюсь, кто-то сможет помогите объяснить что и почему:

Я поместил некоторый код в @try {..} и @catch (NSException * e) {..}, и я подумал, что все это поймало бы, но другой разработчик поставил и assert(false); в конце функции после де-ловля.

Почему?

1 Ответ

1 голос
/ 28 марта 2012

assert(3) не является частью самой Objective-C. Это часть стандарта Си. Посетите справочную страницу . Из спецификации C, раздел 7.2.1.1 Макрос assert :

Синопсис

    #include <assert.h>
    void assert(scalar expression);

Описание

Макрос assert помещает диагностические тесты в программы; оно расширяется до пустого выражения. Когда он выполняется, если expression (который должен иметь скалярный тип) равен false (то есть сравнивается равным 0), макрос assert записывает информацию о конкретный вызов, который не удался (включая текст аргумента, имя исходного файла, номер строки источника и имя включающей функции - последние являются соответственно значениями макросов предварительной обработки __FILE__ и __LINE__ и идентификатора __func__) в стандартном потоке ошибок в формате, определяемом реализацией. Затем он вызывает функцию abort.

Так что assert(false) просто остановит программу в этот момент.

...