В руководстве по программированию Apple Concurrency примеры подкласса NSOperation (как неконкурентные, так и параллельные варианты) используют обработку исключений, и мне интересно, почему они поощряют этот стиль в операциях.
Листинг 2-4. Ответ на запрос отмены
- (void)main {
@try {
BOOL isDone = NO;
while (![self isCancelled] && !isDone) {
// Do some work and set isDone to YES when finished
}
}
@catch(...) {
// Do not rethrow exceptions.
}
}
Мое понимание заключается в том, что в большинстве случаев обработка исключений не является обычной практикой в коде Objective-C - исключения - это, по сути, ошибки программиста, и это должно привести к сбою приложения, тогда как неожиданные входы лучше всего обрабатывать с помощью NSError. (Возможно, мое дезинформированное понимание исходит из таких вещей, как this и this)
Мне интересно, представляет ли NSOperations определенную ситуацию, в которой важна обработка исключений, или если это более предпочтительный стиль конкретного автора этого руководства.
В качестве побочного примечания, некоторые из примеров кода NSOperation следуют этому стилю, другие примеры этого не делают. Большинство высокопроизводительных OSS не используют исключения (например, AFNetworking).