Trabajo en Objective-C todos los días.
Me gusta Objective-C.
Sé que soy la excepción, ya que a algunos de mis compañeros no les gusta mucho. Puedo señalar algunas de las razones por las que Objective-C es único. A algunas personas les gusta esa singularidad, a otras no. A un tercer grupo (y en mi experiencia más grande) simplemente no le gusta el hecho de que es un lenguaje que “solo” puede usarse para las tecnologías de Apple. Puedo usarlo fuera del alcance de una aplicación (ya sea para OSX o iOS) pero no es trivial y la mayoría de la gente no la usa.
Sintaxis
- ¿Cuáles son las ventajas de una aplicación móvil nativa en lugar de un sitio receptivo creado para la web móvil?
- ¿Los desarrolladores móviles nativos tienen miedo de sus trabajos en el futuro?
- ¿Quora necesita necesariamente su sitio o aplicación móvil?
- ¿Cuáles son las diferencias en las filosofías del desarrollo de iOS y el desarrollo de Android?
- ¿Cuánto costaría construir aplicaciones como Messenger por desarrolladores de aplicaciones profesionales?
El sintaxe de Objective-C es extraño para las personas que están acostumbradas a otros idiomas. El mismo tipo de extraño fue que Python no tuviera paréntesis. Usted “llama” a “métodos” (también conocido como realizar selectores (también conocido como envío de mensajes)) usando
[receptor messageWithArgument: argumento ySecondArgument: segundo];
¡Solo mira eso! El nombre del método es ” messageWithArguments: andSecondArgument: ” y presenta los argumentos en el medio. Es una locura. Utiliza corchetes para llamar a los métodos. Es feo!
¡Y la declaración es muy diferente de la invocación! Aquí está la declaración de ese método:
– (vacío) messageWithArgument: (ClassOfTheArgument *) argumento ySecondArgument: (ClassOfTheSecondArgument *) segundo;
Por otro lado … es muy fácil de leer …
En Objective-C usas el símbolo @ en todas partes. @class para declarar una clase @protocol @property etc. Las cadenas comienzan con @ like
@”Hola Mundo”
Y puede crear objetos de la Fundación Objective-C con la notación @. Me gusta:
@YES // igual a [NSNumber numberWithBool: YES]
@ (123 + 456) // igual a [NSNumber numberWithInt: (123 + 456)]
@ {“clave”: objeto} // creando NSDictionary
@ [objectOne, ObjectTwo, ObjectThree] // creando un NSArray
Y eso se debe a que Objective-C admite el significado del código C (o C ++) y las notaciones @ permiten al compilador distinguir entre material Objective-C y material C normal
Convenciones de denominación de código
La convención de Objective-C es ser muy detallada. Se supone que debe nombrar sus métodos sin abreviar nada. Entonces tienes métodos como
– Aplicación (BOOL): (UIApplication *) la aplicación didFinishLaunchingWithOptions: (NSDictionary *) launchOptions
en otros idiomas es probablemente más pequeño y, una vez más, menos fácil de leer.
Direcciones y Mensajes
En Objective-C no puede asignar estáticamente objetos. No tienes objetos dentro de otros objetos. Todo lo que tienes es direcciones a los objetos. Lo que significa que todo es un puntero. Un poco como Java. Excepto que, a diferencia de Java, todavía tiene que indicar explícitamente en todas partes que es un puntero porque todavía puede usar las clases sin puntero de C ++.
La idea detrás de los mensajes es que todos los objetos son independientes entre sí y pueden comunicarse libremente entre ellos. El acto de enviar un mensaje es independiente de quien lo recibe. Lo que significa que puede enviar mensajes a todas las direcciones. Si la dirección sabe cómo manejarla, lo hará, si no lo hace, se bloqueará. Puede sentir que es lo mismo que llamar a los métodos, pero hay un caso particular en el que no lo es: NULL (también conocido como nil). Realizar un selector sobre nulo NO se bloquea y devuelve nulo.
La gente encuentra esto irritante. Creo que esta función se puede utilizar a nuestro favor, y lo hago. Mucho.
Gestión de la memoria
La gestión de memoria de Objective-C es … diferente. La idea de un contador de referencia no es exclusiva de Objective-C sino que está arraigada en el lenguaje. Hay dos tipos de compilación posibles, Contador de referencia automático y Contador de referencia manual. Personalmente, uso el MRC porque me permite tener más control sobre la memoria (de alguna manera lo necesitamos para hacer juegos). Básicamente, usted (de forma automática o manual) dice “Necesito el objeto almacenado en esta dirección” (conserve el objeto), y no lo elimina hasta que diga “Ya no lo necesito” (suelte el objeto) . Si varios objetos retienen un objeto en particular solo cuando todos lo liberan, se eliminará.
Si no retiene el objeto, podría dejar de existir en cualquier momento y, de nuevo, podría funcionar, porque el objeto podría estar allí. Adaptarse a esto lleva tiempo, y es difícil detectar fugas de memoria y por eso algunas personas lo odian.
–
Por otra parte, a algunas personas les gusta quejarse.