Каков наилучший способ выйти и обработать фатальную ошибку в Objective-C? - PullRequest
5 голосов
/ 02 июня 2011

Допустим, мое приложение делает что-то невосстановимое (этого никогда не происходит, верно?: P). Должен ли я использовать exit ()? Должен ли я использовать NSAssert (false, @ "Foo")? Должен ли я что-то бросить? Жесткий ответ в Google для.

Ответы [ 2 ]

0 голосов
/ 02 июня 2011

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

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

  1. информирование пользователя о том, что произошла ошибка;

  2. попытка восстановить как можно больше;

  3. изящно завершает работу приложения.

1 и 3 явно исключают оба параметра NSAssert и exit(), которые вы упомянули.Бросок также не помогает, потому что если вы выбросите исключение и не обработаете его, ваша программа будет прервана внезапно.

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

0 голосов
/ 02 июня 2011

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

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

Если ваше приложение может оказаться в состоянии, когда оно полностью сломано, вам следует изменить дизайн приложения.Не могли бы вы привести пример чего-то «невосстановимого»?

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