2011-12-02 12 views

Respuesta

6

Son bastante diferentes.

El primero obtiene un puntero de objeto del diccionario, luego interpreta el puntero como BOOL. Esto significa que cualquier puntero que no sea nil se interpretará como YES y nil como NO. En el ejemplo concreto, como los diccionarios no pueden contener nil punteros, solo obtendrá YES de esta línea de código.

El segundo toma el mismo objeto del diccionario, luego envía el mensaje boolValue a ese objeto. Presumiblemente, y si el objeto reconoce el mensaje, dará como resultado una versión BOOL del objeto.

Como ejemplo concreto, si el diccionario contiene un NSNumber asociado con la tecla @"boolValue", la NSNumber recibirá el mensaje boolValue, y si no es cero retorno YES, de lo contrario NO.

Para responder a su pregunta, debe usar el segundo formulario. Lanzar un puntero a BOOL rara vez tiene sentido.

6

No, no son lo mismo. La diferencia es que el 2º es correcto, el 1º no.

En su primera línea simplemente arroja el puntero a BOOL, que es más o menos equivalente a comprobar si el puntero es nulo o no y no tiene nada que ver con el valor realmente almacenado en el objeto.

3
[[dictionary objectForKey:@"boolValue"] boolValue]; 

no es un molde, pero invoca un método en NSNumber, que devuelve un bool. Dentro de un elenco podría estar involucrado, pero los detalles de implementación no son públicos.

Cuestiones relacionadas