objective-c nsstring warnings constants

objective c - "Enviar ''const NSString*'' a un parámetro de tipo ''NSString*'' descarta los calificadores" advertencia



objective-c warnings (3)

Tengo constantes NSString, que quiero llamar como:

[newString isEqualToString:CONSTANT_STRING];

¿Algún código equivocado aquí?

Recibí esta advertencia:

el envío de ''const NSString *'' al parámetro de tipo ''NSString *'' descarta los calificadores

¿Cómo se deben declarar?


Debes declarar tu cadena constante de la siguiente manera:

NSString * const kSomeConstantString = @""; // constant pointer

en lugar de:

const NSString * kSomeConstantString = @""; // pointer to constant // equivalent to NSString const * kSomeConstantString = @"";

El primero es un puntero constante a un objeto NSString , mientras que el último es un puntero a un objeto NSString constante.

El uso de una NSString * const impide reasignar kSomeConstantString para que apunte a un objeto NSString diferente.

El método isEqualToString: espera un argumento de tipo NSString * . Si pasa un puntero a una cadena constante ( const NSString * ), está pasando algo diferente de lo que espera.

Además, los objetos NSString ya son inmutables, por lo que hacerlos const NSString tiene sentido.



solo para poner todo en un lugar que se encuentra en varias publicaciones en y funciona para mí, #define es malo porque no puede beneficiarse de los tipos de variables, básicamente el compilador reemplaza toda la aparición cuando se compila (importa Constantes.h cuando lo necesite):

// Constants.h #import <Foundation/Foundation.h> @interface Constants : NSObject extern NSString *APP_STATE_LOGGED_IN; extern NSString *APP_STATE_LOGGED_OUT; @end // Constants.m #import <Foundation/Foundation.h> #import "Constants.h" @implementation Constants NSString *APP_STATE_LOGGED_IN = @"APP_STATE_LOGGED_IN"; NSString *APP_STATE_LOGGED_OUT = @"APP_STATE_LOGGED_OUT"; @end