2011-08-30 20 views
7

Justo cuando pienso que me estoy poniendo cómodo con Objective-C los símbolos mencionados tirarme totalmente por un agujero de conejo ...Objective-C y símbolos ** + -

**     un puntero doble ??

&     qué tipo de cosas puedo hacer con & de referencia, es un @property? un objeto lleno? puntero raro razzledazzle?

& plusmn;     Veo las declaraciones de un método a + o a - before; He visto Java anotar algunas declaraciones de tipo de datos escribiendo manualmente el + y la magia de compilar en Eclipse las cambiaría a: -

Probablemente estoy haciendo preguntas repetitivas y/o estoy fuera del estadio en mis conjeturas; gracias por las respuestas/ediciones.

Respuesta

5

Como debe saber, un puntero apunta a la dirección de un objeto y es la forma en que hace referencia a un objeto. A veces se usa un doble puntero en Objective-C, principalmente para devolver NSErrors, donde se desea recuperar la dirección, es decir, un puntero, a un objeto de error (NSError) si se produce un error, por lo que se pasa un puntero asignado a null y la persona que llama puede cambiar ese puntero para que apunte a la dirección de otro puntero que a su vez apunta a un objeto NSError.

El signo & (&) es utilizado principalmente por las API C de nivel inferior, p. Ej. Gráficos básicos. Se usan para hacer referencia a cosas, como el contexto actual. Siempre que la mayoría de tu código use corchetes en torno a sus llamadas a métodos, no los verás muy a menudo.

El uso de un + o a - antes de las declaraciones de un método se usa para diferenciar entre los métodos de clase (+) e instancia (-). Se invoca un método de clase en la clase en sí (como alloc), mientras que se invoca un método de instancia en una instancia de ese objeto (como init).

2

- y + antes de que una declaración de método designe un método de instancia y un método de clase estática. Para usar un método de instancia, debe crear un objeto de su clase antes de llamar a su método, se puede llamar directamente a un método estático desde un tipo de clase

11

Se entra en la parte C que se construye con el objetivo-c encima de.

** es un puntero a un puntero. Como las funciones en C toman argumentos por valor, significa que no puede cambiar el valor del argumento en esa función. Pero, al proporcionar un nivel de direccionamiento indirecto y pasar un puntero al puntero, puede cambiar el valor.

& significa que es una referencia. Si un argumento toma un ** y tiene una variable *, pase una referencia al mismo.

Foo *foo; 
[self changeFoo: &foo]; 

- (BOOL)changeFoo: (Foo **)foo 
{ 
    // dereference the double pointer and assign a val = alloc init returns a * 
    *foo = [[Foo alloc] init]; 
    return YES; 
} 

Un uso común en objetivo-c/cocoa es NSError. Es esencialmente un argumento fuera.

NSError *err; 
BOOL success = [self doSomething:@"Foo" error:&err]; 

- (BOOL)doSomething:(NSString*)withData error:(NSError**)error 
{ 
} 
Cuestiones relacionadas