Punteros C vs. punteros Objective-C
Vengo de un fondo de Objective-C y estoy tratando de ampliar mi conocimiento en C. Sin embargo, una cosa me confunde, y esa es la diferencia entre los punteros en C y Obj-C. Como puede ver en los ejemplos a continuación, las cosas parecen comportarse de manera un poco diferente entre ambos idiomas, y me preguntaba si podría ayudar a explicar por qué.
El código C funciona bien:
void myFunction()
{
int x, *pointerX;
pointerX = &x;
*pointerX = 5;
// Prints: "x is 5"
printf("x is: %i", x);
}
Código de obj-c falla:
- (void)myMethod
{
NSString *string = @"Caramel coffee", *stringPointer;
stringPointer = &string; // Warning: Assignemnt from incompatible pointer type
*stringPointer = @"Chocolate milkshake"; // Exception: Incompatible types in assignment
NSLog(@"string is: %@", string);
}
Pregunta: ¿Por qué no puedo asignar stringPointer a la dirección de memoria de la cadena (stringPointer = &string;
), y por qué soy capaz de actuar*pointerX = 5;
debajo de C, pero no puedo actuar*stringPointer = @"Chocolate milkshake";
bajo Objective-C?
Me doy cuenta de que Obj-C se ocupa de los objetos y C no, pero parece que no puedo entender los detalles tras bambalinas de por qué no funciona en Obj-C. Cualquier ayuda es muy apreciada. ¡Gracias! :)