Question Retourner les erreurs dans objective-c


Im newish à objectif-c et commence à me demander quelle est la manière commune / standard / appropriée pour la manipulation et la capture des erreurs?

Il semble possible d'utiliser NSError pour cela, est-ce une bonne idée ou un détournement de cacao?


10
2017-10-01 11:20


origine


Réponses:


Je suis sûr que c'est ce que la classe NSError est là pour faire - donnez des détails sur les erreurs. Le modèle le plus courant que vous verrez est une méthode qui prend un pointeur sur un objet NSError, comme dans:

- (id)doSomethingWithArgument:(id)arg error:(NSError **)error

La méthode retourne une valeur (ou éventuellement nil) pour le résultat de faire quelque chose, mais si l'appel a échoué, un objet NSError sera placé sur le pointeur avec des détails sur l'échec. Votre documentation est responsable de la spécification de ce qui est retourné si la méthode rencontre une erreur.

L’autre méthode qui vient à l’esprit est la @throw-@catch bloc; cependant, en Objective-C @throwUne exception peut être coûteuse en calcul, et il est généralement recommandé de ne le faire que dans des situations vraiment exceptionnelles.

Modifier: wow, il se trouve que beaucoup de gens ont des opinions très fortes sur @throwexceptions. Pour résumer le commentaire (très utile) sur le sujet:

  • Le fait de lancer des exceptions devrait le plus souvent porter sur des erreurs de programmeur (situations qui devraient jamais arriver, et autres); des exceptions ne devrait pas être utilisé pour la gestion des erreurs ordinaires. Au lieu de cela, utilisez le error méthode démontrée ci-dessus ou poster des instances de NSNotification.
  • Si vous finissez par faire un usage intensif de @throw/@catch blocs, faites très attention à la logique qui les entoure. Objective-C offre de nombreuses façons de détacher des méthodes à exécuter dans d'autres threads, ou de retarder l'exécution, etc. Faites très attention à toutes ces possibilités lorsque vous écrivez votre code.

Enfin, un autre point très valable:

  • Si vous utilisez le error objet passé à une méthode, la valeur de retour doit l'indiquer. N'essayez pas de faire les deux (renvoyer un objet partiellement valide et met le error objet).

17
2017-10-01 11:27