2010-07-31 2 views
0

Есть ли в объективе-C любой способ увидеть, можно ли выполнить определенную задачу, не рискуя сбой приложения?iphone: try end try

Другие языки, как Javascript имеют

try 
    { 
    //Run some code here 
    } 
catch(err) 
    { 
    //Handle errors here 
    } 

есть что-то в Objective-C? Если да, то какой синтаксис?

спасибо.

ответ

4

Посмотрите Exception Handling:

Cup *cup = [[Cup alloc] init]; 

@try { 
    [cup fill]; 
} 
@catch (NSException *exception) { 
    NSLog(@"main: Caught %@: %@", [exception name], [exception reason]); 
} 
@finally { 
    [cup release]; 
} 

Также стоит иметь вид: Error Handling Programming Guide

+1

Не делайте этого. Исключения являются трудными ошибками в iOS и не подлежат восстановлению. – bbum

+0

@bbum: Нестандартные исключения, которые вы можете бросить. Но я согласен, что для общей обработки ошибок эта документация может быть лучше: http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ErrorHandlingCocoa/ErrorHandling/ErrorHandling.html#//apple_ref/doc/uid/TP40001806 –

+1

Даже пользовательские исключения. Если эти исключения проходят через любой системный код, поведение не определено. Исключения для управления потоком безопасны только при 100% изоляции от кода рамки. – bbum

18

Хотя ответ Феликса технически правильно, это не вся история.

В iOS и Mac OS X исключения используются для указания невосстановимых программных ошибок. Исключения не используются для указания ошибок пользователя или восстанавливаемых ошибок, например, на Java.

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

+0

Итак, нет надежды на существование чего-либо, что можно использовать, как в Javascript и на других языках? – SpaceDog

+0

Nope. Используемый шаблон проектирования заключается в том, что исключения являются непонятными ошибками. – bbum

+0

Если исключения являются неустранимыми ошибками, почему синтаксис включает способ уловить и восстановить из них или выполнить код, даже когда генерируется исключение, вместо простого вызова установленного NSExceptionHandler и принудительного завершения? –

0

Реальный вопрос: что вы пытаетесь сделать в этом блоке блокировки ошибок?

Существуют различные способы подключения к различным видам ошибок. Какого рода код специально вы хотите обернуть в таком блоке?

Смежные вопросы