разработка iPhone: Как Поймать Exception/NSError в Objective C?

http://www.tohtml.com/ созданный синтаксис выделил код HTML для большого количества языков. Это могло бы быть тем, что Вы ищете.

9
задан Peter Mortensen 1 February 2010 в 23:41
поделиться

3 ответа

Одна из ваших проблем заключается в том, что str никогда не инициализируется, что означает, что str может указывать на nil (но это не гарантируется). Это определенно указывает на мусор.

Если вы пройдетесь по вашему коду, я могу почти гарантировать, что ваш выпуск вызывается с нулевым значением, что в Objective-C полностью допустимо.

Попробуйте сделать следующее:

NSString *str = [[NSString alloc] initWithString:@"a string"];
[str release];
[str release];

Вызов release не освобождает объект, он просто уменьшает счетчик сохранения на 1. Когда счетчик сохраненных объектов равен 0, автоматически вызывается

[self dealloc];

.

Если приведенный выше код не генерирует исключение немедленно, это может быть вызвано тем, что фактическое сообщение об освобождении откладывается в какой-то момент в будущем (я не уверен, когда именно вызывается метод dealloc после того, как счетчик удержания достигает 0. Я думаю , что оно вызывается немедленно и в том же потоке, но некоторые другие ниндзя Какао будут знать наверняка).

Что вы можете сделать, так это добавить категорию в NSObject и реализовать методы dealloc и release и попытаться поймать ваше исключение.

- (void)dealloc{

 @try
    {
        [super dealloc];
    }
 @catch(NSException* ex)
    {
        NSLog(@"Bug captured");
    }

}



- (void)release{

     @try
        {
            [super release];
        }
     @catch(NSException* ex)
        {
            NSLog(@"Bug captured");
        }

    }

Дополнительным бонусом является то, что этот код будет действителен для каждого объекта в вашем приложении, поскольку это категория в NSObject.

Для полноты картины, если вы просто практикуете их правила управления памятью, все будет в порядке.

3
ответ дан 4 December 2019 в 11:07
поделиться

Objective-C - это неуправляемая среда выполнения; код, который вы компилируете, запускается непосредственно на ЦП, а не на виртуальной машине. Это означает, что у вас нет надзорного уровня, который может улавливать все возможные режимы отказа, как это происходит при работе в виртуальной машине .NET или JVM. Короче говоря, единственный способ быть полностью уверенным в том, что программа не может дать сбой, - это очень тщательно кодировать и очень тщательно тестировать. И даже тогда вы не уверены, вы просто думаете, что это так.

Последняя версия Xcode интегрирует статический анализатор Clang («Build and Analyze» в меню Build), который может идентифицировать некоторые классы потенциальных ошибок - Я почти уверен, что это, например, отметит ваш пример выше). Но здесь нет волшебной пули; единственное решение - упорный труд.

12
ответ дан 4 December 2019 в 11:07
поделиться

Одной из команд, которая действительно улучшит скорость движения, является f . f плюс символ будет переходить к первому вхождению этого символа в текущей строке. При нажатии ; произойдет переход к следующему экземпляру. Конечно, это можно использовать в сочетании с другими командами. Так, например, удаление всех символов до первой закрывающей круглой скобки включительно достигается нажатием d + f + ) .

-121--4126652-

Хотя я все еще думаю, что это вопрос программирования, на него здесь ответили: https://superuser.com/questions/103026/open-a-direct-file-on-the-hard-drive-from-firefox-file

Firefox и IE8 поддерживают схему файлового URI .

Вот несколько примеров, действительных для Системы Windows, ссылающиеся на то же самое файл c :\WINDOWS\clock.avi

файл ://localhost/c |/WINDOWS/clock.avi
файл :///c |/WINDOWS/clock.avi
файл ://localhost/c :/WINDOWS/clock.avi
file :///c :/WINDOWS/clock.avi

Пока последний является наиболее очевидным и читаемый человеком, первый - наиболее полная и правильная.

Видимо (с того же URL-адреса):

браузеры Mozilla отказываются следовать URL-адресам файлов на странице, которую они получили с помощью протокола HTTP.

но:

Браузеры Mozilla можно настроить на отмену этого ограничения безопасности, как описано в разделе Mozillazine « Ссылки на локальные страницы не работают ».

-121--4321145-

Тест тестирования Тест Тест Тест Тест Тест Тест

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

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

Конечно, бывают ситуации, когда невозможно гарантировать, что вызов метода не вызовет исключения и вам нужно быть готовым, но обернуть все в блоки @ try/@ catch - это определенно не решение.

4
ответ дан 4 December 2019 в 11:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: