¿Cómo puedo forzar que una variable no utilizada sea parte de un bloque?

Considerando el siguiente código:

- (void)downloadObjectUsingURL: (NSURL *)url;
{
    id file = [self createFileForURL: url];
    Finalization objectFinalization = ^() {
        // we don't access url here, but it would be handy to see it in the debugger
        [file close];
    }
    id request = [self buildRequestFromURL: url];
    [object download: request
              toFile: file
        finalization: objectFinalization];
}

¿Cuál es la forma más fácil de forzar url para ser copiado como parte de objectFinalizationcontexto, copiado y pasado como parte de objectFinalization con el fin de facilitar la depuración?

Puedo pensar en algunas respuestas posibles, pero ninguna me parece tan buena. puedo hacer NSLog(@"%@",url), pero eso causa vómitos. Puedo hacer un NSAssert(url,...); or if (url) {}, pero ambos no expresan realmente lo que estoy tratando de hacer.

preguntado el 16 de mayo de 11 a las 18:05

3 Respuestas

Envuelva la llamada a NSLog() in #ifdef debug.. #endif

contestado el 16 de mayo de 11 a las 22:05

Voy a seguir adelante y aceptar esto, ya que creo que es la mejor respuesta que obtendré. :) Puedo hacer algún tipo de macro para esto, aunque: #define FORCE(a) NSLog(@"%@",a) or #define FORCE(a) - Steven fisher

Pensé en una mejor respuesta, pero gracias a @NSResponder por hacerme pensar de esta manera:

#if DEBUG
#define FORCE(a) NSParameterAssert(YES || a)
#else
#define FORCE(a)
#endif

Esto hace que el código se vea así:

- (void)downloadObjectUsingURL: (NSURL *)url;
{
    id file = [self createFileForURL: url];
    Finalization objectFinalization = ^() {
        FORCE(urL);
        [file close];
    }
    id request = [self buildRequestFromURL: url];
    [object download: request
              toFile: file
        finalization: objectFinalization];
}

contestado el 16 de mayo de 11 a las 22:05

Años después descubro la respuesta más sencilla. Dentro del bloque, use:

(void)variable;

Ejemplo:

- (void)downloadObjectUsingURL: (NSURL *)url;
{
    id file = [self createFileForURL: url];
    Finalization objectFinalization = ^() {
        (void)url;
        [file close];
    }
    id request = [self buildRequestFromURL: url];
    [object download: request
              toFile: file
        finalization: objectFinalization];
}

Si solo quieres en debug:

- (void)downloadObjectUsingURL: (NSURL *)url;
{
    id file = [self createFileForURL: url];
    Finalization objectFinalization = ^() {
#if DEBUG
        (void)url;
#endif
        [file close];
    }
    id request = [self buildRequestFromURL: url];
    [object download: request
              toFile: file
        finalization: objectFinalization];
}

respondido 23 mar '13, 10:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.