2010-06-10 6 views
19

Procedente de Java supongo que esto es lo esperado. Realmente me encantaría aprender Objective-C y comenzar a desarrollar aplicaciones para Mac, pero la sintaxis me acaba de matar.Quiere aprender Objective-C pero la sintaxis es muy confusa

Por ejemplo:

-(void) setNumerator: (int) n 
{ 
    numerator = n; 
} 

Lo que es rociada y por qué es seguido por vacío entre paréntesis? Nunca he visto el vacío entre paréntesis en C/C++, Java o C#. ¿Por qué no tenemos un punto y coma después de (int) n? Pero lo tenemos aquí:

-(void) setNumerator: (int) n; 

¿Y qué pasa con este proceso alloc, init, release?

myFraction = [Fraction alloc]; 
myFraction = [myFraction init]; 
[myFraction release]; 

Y por qué es [myFraction release]; y no myFraction = [myFraction release];?

Y, por último, ¿qué pasa con @ signs y qué equivale a esta implementación en Java?

@implementation Fraction 

@end 

actualmente estoy leyendo Programming in Objective C 2.0 y es tan frustrante el aprendizaje de esta nueva sintaxis para alguien en el fondo de Java.

ACTUALIZACIÓN 1: Después de leer todas estas respuestas y la Programación en Objective C 2.0 un poco más, ¡todo comienza a tener sentido ahora!

ACTUALIZACIÓN 2: Gracias por el gran consejo "support-multilanguage". Podemos combinar estas dos afirmaciones en uno de este modo:

myFraction = [Fraction alloc]; 
myFraction = [myFraction init]; 

puede reducirse a:

myFraction = [[Fraction alloc] init]; 
+1

Te acostumbrarás a él después de trabajar con él por un tiempo. Me pareció bastante extraño cuando comencé también. – progrmr

+2

http://developer.apple.com/mac/library/documentation/cocoa/conceptual/objectivec/Introduction/introObjectiveC.html Lea esto. No es diferente comenzar un nuevo idioma que cualquier otro. Existen diferencias de sintaxis y administración de las diferencias de memoria, pero eso no es diferente de iniciar otro lenguaje de alto nivel. –

+0

Puedo digerir la sintaxis de Objective-C en 1 día. Pero me lleva semanas (apenas) entender la gestión de la memoria. ¡Buena suerte! – ohho

Respuesta

26

¿Qué es ese dash para y por qué va seguido de vacío entre paréntesis?

El guión - significa "nivel de instancia" (que es el valor por defecto en Java). Cuando vea un signo más + significa nivel de clase (lo mismo que usar static en Java)

El espacio vacío entre paréntesis es el tipo de retorno, ver a continuación.

¿Por qué no tenemos un punto y coma después de (int) n? Pero nosotros tenemos aquí:

-(void) setNumerator: (int) n; 

Porque esa es la firma del método, se puede pensar en ella como una interfaz:

interface YourClass { 
     void setNumerator(int n);// see? semicolon 
} 

misma situación.

Objective-C tiene raíces en C (en realidad esta es la C real con objetos) necesita un archivo de cabecera (completamente eliminado en Java) donde se definen las funciones/métodos que su clase tendría.

El equivalente si tal cosa existiría en Java sería:

// YourClass.java.h 

interface YourClass { 
     void setNumerator(int n); 
} 
// YourClass.java.m 
class YourClass { 
     void setNumerator(int n) { 
     this.n = n; 
     } 
    } 

Y lo que es con este alloc, init, proceso de liberación?

myFraction = [Fraction alloc]; 
myFraction = [myFraction init]; 
[myFraction release]; 

alo-init es el equivalente para new en Java, alloc que es cuando se pide la memoria para su objeto, alloc memoria de solicitud y init llama al método init, equivalente al constructor de la clase de Java (por cierto Ruby hace el same behind scenes)

No hay equivalente a la versión en Java porque es basura recolectada, en Objective-C tiene que liberar su objeto.

Por cierto, la inicialización también podría ser myFraction = [[Fraction alloc]init];

Y por último, ¿qué pasa con los signos @ y lo que es equivalente a esta implementación en Java?

@implementation Fraction 

@end 

Esa es la definición de clase como he mencionado anteriormente.

Actualmente estoy leyendo Programación en Objective C 2.0 y es muy frustrante aprender esta nueva sintaxis para alguien con experiencia en Java.

Aquí es una respuesta relacionada que le ayudará a conseguir más familiarizados con los corchetes:

Brief history of the "square brackets" is I remember it.

+0

¡Respuesta muy útil, gracias! –

+0

Por cierto, el '-' es equivalente a static en Java o '+' al lado de 'void'? –

+0

@Sahat: '+' es similar a los métodos estáticos, pero se llaman métodos de clase. – dreamlax

6

Tal vez tienen un wizz través de la página wiki para Objective-C. Acabo de hacer y encontré la mayoría de tus respuestas.

http://en.wikipedia.org/wiki/Objective-C

Soy de un fondo de Java también, en la primera objectivec mirada no se ve muy atractivo.

Parece C++ con pequeños bits de sintaxis en su rostro.

¿Qué es ese dash para y por qué va seguido de vacío entre paréntesis?

menos aquí denota un método de instancia, un signo más indica un método de clase

nunca he visto vacío en paréntesis en C/C++, Java o C#.

este es el tipo de retorno

¿Por qué no tenemos un punto y coma después (int) n?

Si no proporciona un cuerpo de método, la sintaxis es una declaración de método, no una implementación.

Y, por último, ¿qué pasa con los signos @ y qué es esta implementación equivalente en Java?

@implementation Fraction 

@end 

en Java sería probablemente

public class Fraction { 

} 
2

Viniendo del mismo libro, el signo "-" indica al compilador que el método es un método de instancia (que modifica los datos). Sin embargo, un signo "+" indica a la computadora que se trata de un método de clase (estático).

2

Usted dijo que está leyendo "programación en Objective C 2.0" de Stephen Kochan. Puede que no sea tan rápido como te gustaría, pero el tiempo que pases con ese libro te servirá. Todo lo que estás preguntando se aborda en el libro de Kochan. Puede complementar eso con lo que encuentre en el sitio de Apple, en Wikipedia, y en O'Reilly MacDevCenter.com, como "Inside the Objective-C Runtime". La implementación dinámica de objetos de Objective C es un poco diferente que Java o C++ y tiene un aspecto diferente, tal vez debido al enfoque inspirado en Smalltalk. Ve con Kochan, complementa eso con la web, y mira si los puntos clave han sido investigados aquí. Si no, este será un gran lugar para ellos.

2

También estoy empezando con Objective C y estoy de acuerdo con la sintaxis que parece extraña en relación con Java o C++. Lo mejor que he encontrado es leer un código de ejemplo. Estoy seguro de que puedes encontrar muchas cosas con un poco de Google. No tengo permiso para publicar más de un enlace, pero si googleas el "código de ejemplo objetivo c", deberías encontrar un montón de código.

Si usted está buscando para una referencia rápida de que algunos de la sintaxis extraña significa, este es un muy buen tutorial:

http://cocoadevcentral.com/articles/000082.php

0

Si todo eso sólo se consigue abajo, empezar a aprender Swift! Tiene todas las cosas geniales que obj-c hace, pero con una sintaxis mucho más reconocible. Y ellos creen que es más rápido también. Disponible si tienes una cuenta de desarrollo de Apple: obtén XCode 6/iOS8 beta.

Cuestiones relacionadas