Методы, которые выдают исключение - PullRequest
1 голос
/ 27 апреля 2011

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

Оглядываясь назад, я понимаю, почему оно вызывает исключение, и часто решение проблемы приводит к улучшению кода.

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

Например:

NSString *aString;
aString = @"Less than 42 characters.";
[aString substringToIndex:42];

выдаст исключение, поскольку строка содержит менее 42 символов.

Также это:

NSString *aString = @"This is a string.";
NSString *bString = nil; 
aString = [NSString stringByAppendingString:bString];

также завершится аварийно, так как bString равен нулю.

Есть еще примеры?

Ответы [ 2 ]

2 голосов
/ 27 апреля 2011

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

Это говорит вам в документации.

1 голос
/ 27 апреля 2011

Хотя Objective-C поддерживает исключения, они используются редко. Самая большая проблема с ними - утечки памяти, вызванные выпрыгиванием из контекста до того, как объект может быть освобожден (хотя в среде GC это больше не проблема).

Исключения чаще всего используются при смертельных состояниях в Objective-C, они редко используются для исправляемых ошибок. Для этого методы передают указатели на указатели, как в +[NSURLConnection sendSynchronousRequest:returningResponse:error:].

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

Ваш первый пример всегда будет выдавать исключение BTW, так как NSString не имеет метода subString:.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...