37 votes

NS_BLOCK_ASSERTIONS en Objective-C

J'utilise des appels NSAssert () dans une application iPhone et, d'après les documents Apple, les assertions ne sont pas compilées dans le code si NS_BLOCK_ASSERTIONS est défini.

Pour désactiver les assertions, dans un fichier d'en-tête, je déclare: #define NS_BLOCK_ASSERTIONS

Cependant, le code d'assertion semble toujours fonctionner.

Y a-t-il quelque chose qui me manque ici?

Merci

John

61voto

puzzle Points 3952

Si vous avez créé votre Xcode projet basé sur l'un des modèles standard, le Cacao en-têtes (y compris NSException.h qui contient l' NSAssert macros) va se prétraitées avant tous les autres fichiers dans le projet. Un #define NS_BLOCK_ASSERTIONS dans tout le projet de l'en-tête ou de fichiers de mise en œuvre a donc pas d'effet sur l' NSAssert des macros.

Essayez de mettre des NS_BLOCK_ASSERTIONS dans le préprocesseur macros de votre cible ou même du projet (pour la configuration de version seulement):

GCC_PREPROCESSOR_DEFINITIONS = NS_BLOCK_ASSERTIONS

Ou de mettre des #define NS_BLOCK_ASSERTIONS dans le préfixe.pch) de la tête avant de l' #import <Cocoa/Cocoa.h> ou #import <Foundation/Foundation.h> des lignes.

13voto

blackjacx Points 154

Comme @dwsolberg mentionné, Xcode a un nouveau paramètre de construction appelés ENABLE_NS_ASSERTIONS. Pour les nouveaux projets de sa valeur pour la libération de configuration est réglé sur NO et pour toutes les autres configurations YES. Vous pouvez utiliser ce paramètre ainsi que le largement utilisé NS_BLOCK_ASSERTIONS approche, qui est encore valable dans Xcode 6.

Preprocessor Macro Approach

Foundation Assertion Build Setting

Les affirmations sont un outil pour traquer les bugs pendant les temps de développement et ne devrait jamais de feu dans la production de code! Aussi des exceptions doit être utilisée que si elle est absoloutely nécessaire, c'est à dire si quelque chose allait tellement mal que le programme n'est pas en mesure de poursuivre l'exécution. Le Cacao est de lui donner des méthodes critiques un boolean valeur de retour et la paramétrer avec une erreur de l'objet qui peut être défini à l'intérieur de la méthode et peut être utilisé à l'extérieur, si la valeur de retour est - NO.

Hope qui aide des gens ;-)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X