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! :)

Respuestas a la pregunta(7)

Su respuesta a la pregunta