2010-06-02 4 views
2

Google Coding Standard pour l'objectif C dit que nous devrions not throw exceptions, quelles sont les alternatives à @throw alors?Quelles sont les alternatives à jeter des exceptions dans l'objectif c

+0

Les normes de codage de Google ne disent pas ** nous ** ne devrions pas jeter des exceptions. Ils disent seulement que les personnes qui écrivent du code pour des projets open source Google ne doivent pas utiliser d'exceptions. – JeremyP

+0

vous avez raison, c'est juste que j'essaie de suivre leurs directives dans mes projets aussi. vous ne savez jamais quand vous pourriez mélanger C++ avec cela et cela causera des problèmes pour les objets créés sur la pile. – malik

Répondre

6

Une possibilité est de fournir des informations d'exception prolongée par NSError:

- (BOOL) doSomethingWhichCanFailWithError: (NSError**)aLocation { 
    ... 
    if(didFail) { 

     if(aLocation) { 

      *aLocation = [NSError errorWithDomain: kMyErrorDomain code: myErrorCode userInfo: nil]; 
     } 
    } 

    return !didFail; 
} 

L'appelant peut vérifier si l'appel a réussi en examinant la valeur du résultat. Si plus d'informations sont requises en cas d'erreur, il peut fournir un emplacement où la méthode peut stocker des informations supplémentaires:

NSError* error = nil; 

if(![instance doSomethingWhichCanFailWithError: &error]) { 

    NSString* domain = [error domain]; 

    if([kMyErrorDomain isEqual: domain]) { 

     switch([error code]) { 
     case ...: ... 
     default: ... 
     } 
    } 
} 
+1

+1 Ceci est le modèle recommandé par Apple. Personnellement, j'aime les exceptions et je les utilise le cas échéant mais vous ne pouvez pas autoriser les exceptions à se propager en dehors de votre propre code car tout appel de votre code peut ne pas supporter les exceptions. – JeremyP

+0

Existe-t-il également un modèle recommandé traitant des erreurs asynchrones? c'est-à-dire des codes d'erreur de réseau etc. qui ne sont pas détectables au préalable? – chakrit

Questions connexes