¿Por qué a los desarrolladores de aplicaciones no les gusta Objective-c?

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

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.

Principalmente debido a razones inventadas como demasiada verbosidad, paréntesis, pero sobre todo es falta de voluntad para adoptar una mentalidad diferente.

ObjectiveC es un lenguaje muy simple dado que uno conoce C, pero no se parece en nada a C, porque está basado en Smalltalk. ObjectiveC también es un lenguaje antiguo y muestra su antigüedad en algunos lugares. La “gestión de memoria manual” no es ese manual en absoluto, porque la mayoría de las veces todo lo que necesita es asignar un objeto y olvidarse de él. Los programas que no son ARC son raros hoy en día. ObjectiveC es casi inútil sin Cocoa, por lo que aprenderlo también incluye comprender Cocoa. El marco está en su mayoría muy bien diseñado pero tiene sus propias dificultades.

Cuando se trata de Swift, el único lugar donde es más fácil que ObjectiveC es su sintaxis que se parece a la de Rust o Java. De lo contrario, es un lenguaje bastante grande y complejo que definitivamente es mucho más difícil de aprender para un principiante que el relativamente simple ObjectiveC.

Objective-c tiene una sintaxis no amigable para principiantes. Puede ver esto fácilmente con el ejemplo “Hola mundo”.

En el objetivo-c:

NSString * str [correo electrónico protegido] “HelloWorld”; NSLog (@ “% @”, str)

En rápido:

let str = “HelloWorld” println (“\ (str)”)

Además, el objetivo c trata con la gestión manual de la memoria. Para la mayoría de las personas, Swift es un lenguaje más fácil, o crean aplicaciones híbridas utilizando herramientas como PhoneGap, Ionic, etc.