Cos'è NSParameterAssert?


Risposte:


115

È un modo semplice per verificare che il parametro di un metodo non sia nilo meno 0. Quindi, fondamentalmente, lo si utilizza per creare una precondizione, affermando che è necessario impostare alcuni parametri. Se non è impostato, la macro provoca l'interruzione dell'applicazione e genera un errore su quella riga. Così:

- (void)someMethod:(id)someObjectThatMustNotBeNil
{
  // Make sure that someObjectThatMustNotBeNil is really not nil
  NSParameterAssert( someObjectThatMustNotBeNil );
  // Okay, now do things
}

Le pre-condizioni sono un modo semplice per garantire che i metodi / API vengano chiamati correttamente dal programmatore. L'idea è che se un programmatore viola la precondizione, l'applicazione termina presto, si spera durante il debug e il test di base.

NSParameterAssert può essere utilizzato per verificare che qualsiasi espressione sia vera, tuttavia, quindi puoi usarla anche in questo modo:

NSParameterAssert( index >= 0 ); // ensure no negative index is supplied

Documentazione di Apple per la macro NSParameterAssert ()


1
Assicurati di intercettare le eccezioni nel codice, altrimenti se Assert è vero, la tua app si bloccherà.
lucius

14
@lucius: le affermazioni non devono essere utilizzate per controllare le condizioni in un'applicazione distribuita, sono lì per rilevare gli errori durante lo sviluppo. Fare in modo che qualcosa si blocchi in cattive condizioni (come una presa non collegata a un pennino), piuttosto che fallire silenziosamente, ti consente di trovare i problemi in anticipo. Molte persone li disabilitano al momento della distribuzione tramite macro o #ifdefs.
Brad Larson

5
@lucius - L'obiettivo è far interrompere l'applicazione quando le condizioni preliminari non vengono soddisfatte. Ciò consente al programmatore di sapere immediatamente che ha fatto qualcosa di sbagliato. Per garantire che le asserzioni in Cocoa non vengano valutate, è possibile definire la macro NS_BLOCK_ASSERTIONS. Ciò li disabilita, ma l'idea è di impedire l'esecuzione di effetti collaterali o di rallentare il codice piuttosto che proteggersi dal crash: per produzione, le asserzioni non dovrebbero mai attivarsi se usate correttamente.
Jason Coco

1
È possibile rimuovere queste affermazioni in modo semplice quando si eseguono build di produzione. IMHO questi sono utilizzati al meglio durante lo sviluppo per rilevare errori di programmazione (come menzionato nel commento sopra).
Johan Karlsson

5
@JohanKarlsson È possibile e impostato di default nelle versioni correnti dei modelli (questo risale piuttosto lontano) nella Releaseconfigurazione. Puoi controllarlo impostando le ENABLE_NS_ASSERTIONSimpostazioni di compilazione nelle versioni più recenti di Xcode, o definendo la NS_BLOCK_ASSERTIONSmacro e impostandola su 1. In Xcode 5 c'è un'impostazione del progetto * Abilita le asserzioni della fondazione` che imposta l'impostazione di compilazione e le impostazioni predefinite su Yesdentro Debuge Nodentro Releaseconfigurazioni.
Jason Coco
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.