Establecer el valor integer en el objective c

Recientemente he comenzado a progtwigr en iOS … Estoy revisando un fragment de código que declara las siguientes variables:

int rc = 0X00; sqlite3_stmt *pStmt = 0X00; FMStatement *stat = 0X00; BOOL abc = 0X00; 

¿¿Qué significa esto?? Leí en alguna parte que establecer 0X00 en una variable de reference significa ponerlo en NULL (en C). ¿Pero qué significa una variable de tipo BOOL y una variable de tipo int a 0X00?

Sugiero que lea sobre los conceptos básicos de lenguajes de progtwigción, específicamente, progtwigción C con pointers. Objective-C es un superset de C y sigue muchas reglas similares.

Pero a su pregunta: El 0x delante de los valores literales en el código (0x00) especifica que el valor se interpreta como hexadecimal en lugar de decimal. Pero 0x00 (hex) es igual a 0 (dec).

 int rc = 0x00; //same as int rc = 0; 

int es un tipo primitivo en Obj-C y C que especifica un integer, efectivamente está inicializando la variable. En el lenguaje C, debe inicializar las variables, de lo contrario, podrían apuntar a una pieza de memory aleatoria. Por lo tanto, examina este código:

 int a; int b = 0; //a is NOT equal to b! 

En C, la variable 'a' no se ha inicializado y, por lo tanto, no suele ser seguro asumir que se inicializará a 0. Siempre inicialice su variable. Si hiciste un printf o un NSLog de la variable 'a', verás que imprime un número enorme y no tiene sentido (a veces depende del comstackdor)

Lo mismo se puede decir de un BOOL. Aunque establecer un BOOL en 0 es lo mismo que establecerlo en falso;

 BOOL flag = 0; //The same as saying BOOL flag = false; 

Ahora para la parte final de su código:

 FMStatement *stat = 0X00; 

A menudo, en Objective-C si se trata de apuntadores y objects, debe inicializar el puntero para apuntar a alguna dirección de memory. La dirección real de la memory generalmente está determinada por la stack / montón y no necesita preocuparse por eso. Pero debe asegurarse de que el puntero no apunte a la location incorrecta (conocida como puntero de basura). Para hacer esto, simplemente establecemos nuestro puntero a cero. p.ej:

 FMStatement *stat = nil; //This pointer is now safe. Although memory still hasnt been allocated for it yet 

Por lo general, esto se ocupa de ti cuando asignas la memory de inmediato a un object, por lo que en este caso no tienes que preocuparte por inicializar el puntero a nil:

 FMStatement *stat = [[FMStatement alloc]init]; 

Como dije, te recomiendo que leas sobre la progtwigción básica de C, las asignaciones, los pointers, los types de datos, la initialization, etc., una vez que tengas una comprensión de esto, luego te muevas a Objective-C, que luego construye una parte superior con objects orientados a objects.
Buena suerte.

0X00 es simplemente 0 en notación hexadecimal. Asi que,

 int rc = 0X00; 

es lo mismo que

 int rc = 0; 

Lo mismo para variables BOOL, donde 0 es igual que NO . Usar 0X00 es extraño: tendría más sentido usar 0 o NO cuando sea apropiado, y usar nil para los pointers.