Преобразование Java в Objective-C: обработка исключений - PullRequest
1 голос
/ 17 июля 2010

Я конвертирую библиотеку Java в Objective-C.Код Java использует исключения (на мой взгляд, в Objective-C).При преобразовании я должен генерировать исключения Objective-C (только внутри библиотеки; я поймаю их до того, как они уйдут) или должен использовать конструкции NSError.

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

Ответы [ 4 ]

2 голосов
/ 17 июля 2010

Если библиотека может обрабатывать все исключения самостоятельно, то они на самом деле не являются исключениями в смысле слова Objective-C: не было ошибок программиста; скорее, произошло нечто совершенно ожидаемое. При необходимости вы должны использовать коды ошибок / NSError, но вы можете использовать большую часть информации, предоставленной исключениями, и просто вернуть значение, которое указывает на «ошибку» (nil, 0 и * 1003). * быть некоторыми из наиболее распространенных) и справиться с этим. Вы могли бы также рассмотреть методы делегата обработки ошибок.

2 голосов
/ 17 июля 2010

Бросать и перехватывать исключения в Objective-C стоит дорого (за исключением 32-битной Mac OS X, где часть @try кода перехвата исключений является дорогой частью вместо части @catch.)

Вам лучше возвращать коды ошибок в каком-то механизме (например, NSError, ОО способ сделать это в Objective-C.) Пусть они всплывают в коде, который обращается к вашей структуре, а затем позволяют что код обрабатывает его соответствующим образом.

Очистка памяти в случае ошибки в любой из систем не должна вызывать особых беспокойств, так как вы должны иметь возможность помещать большинство объектов и выделений в пул автоматического выпуска.Тем не менее, имейте в виду, что пул будет поглощать любые NSError или NSException объекты, созданные в его области действия, поэтому вам необходимо убедиться, что эти объекты выживут после окончания вашего кода с дополнительными сохранениями и выпусками.(Немного не по теме, но я видел, что многие люди запутывают эту часть при обработке ошибок.)

1 голос
/ 18 июля 2010

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

Да, использование исключений стоит дорого, но беспокойство по этому поводу является примером преждевременной оптимизации. В конце концов, по сравнению с вызовом функции C отправка сообщений Objective-C обходится дорого, но вы не слышите, чтобы программисты Objective-C говорили «не используйте сообщения Objective-C».

1 голос
/ 17 июля 2010

Я бы просто вернул ошибки в библиотеке Objective-C (подход NSError). В конце концов, это способ обработки ошибок в C .

...