years with transcription phonetic phonemes its chart and objective-c cocoa osx

objective-c - transcription - words with phonetic symbols



Cocoa Bad Habits (14)

¿Cuáles son esos malos hábitos que ha desarrollado desde que comenzó a codificar en Cocoa?

Creo que hacer una lista de malos hábitos y agregarle activamente y, lo que es más importante, romper esos hábitos es una buena técnica para producir la calidad de tu código. Así que comienza ahora, saca tus malos hábitos de tu pecho. Quizás otras personas compartan tus malos hábitos.


Usar excepciones para el flujo de control

(Y otras circunstancias no excepcionales)

Como aquí se menciona el uso de excepciones en otra respuesta y la documentación referida en los comentarios no enfatiza particularmente este punto, vale la pena enfatizar que las excepciones no deben usarse para el flujo de control normal (como es común en otros entornos). Las excepciones en Cocoa son comparativamente extremadamente costosas. Si desea comunicar un error, utilice un objeto NSError y la arquitectura de manejo de errores proporcionada por Cocoa. No arrojes excepciones.


¿Quieres decir que, aparte de sonreír con aire de suficiencia cuando puedo hacer en diez líneas, qué lleva un codificador MFC 300? Supongo que mi mayor queja sobre mi propio código es la explosión de accesorios; En el próximo trabajo de diseño que hago, me he propuesto el desafío de usar el menor número de propiedades.


1) Cuando utilice variables globales privadas, comience con guiones bajos y colóquelos en la parte de la interfaz del archivo .m como se muestra a continuación:

@interface MyViewController (){ NSArray *_tableData; NSNumberFormatter *_numberFormat; }

2) Solo use @properties para variables públicas globales y / o elementos de interfaz.

3) Sintetice los públicos globales y llámelos por su nombre.

4) Llame a los elementos de su interfaz con self.labelTitle NOT _labelTitle.

La razón principal por la que utilizo estas convenciones de nomenclatura variable es porque puedo ver fácilmente una variable y saber para qué se utiliza y su alcance, pero principalmente es una solución para el error en XCode donde intentas refactorizar -> cambiar el nombre de una variable en el proyecto y no funciona en ciertas circunstancias fuera de esta convención.

Refactoré mis nombres de variable MUCHO y este sistema alivió muchos de los problemas para mí.

Otros consejos rápidos:

  • Utilice el guión gráfico para todo lo que pueda, esto alivia los problemas con la depreciación del código en las nuevas versiones y reduce considerablemente la base de código total.
  • Nombra tus controladores VCMyName (ver controlador), NCMyName (controlador de nav), TVMyName (controlador de tabla de vista), etc. Esto es mejor que el estándar de Apple (MyNameViewController) porque tachar el nombre completo al final suele cortarse debido a que es demasiado largo en muchas interfaces El generador de interfaz interpreta la convención de nomenclatura recomendada correctamente, llamando a las vistas "Mi nombre".
  • Aprenda y use Core Data, NO su propio sistema de consulta SQLite make-shift y cree una unidad auxiliar para acceder a los datos en una o dos líneas de código.
  • No coloque todo el código de su aplicación compartida en AppDelegate, eso no es realmente para lo que es, en su lugar cree una unidad AppController y use el patrón singleton para acceder a ella en sus vistas según sea necesario.
  • Siga la convención de Apple de pasar los datos al próximo controlador de vista y usar delegados para manejar los datos devueltos. Esto es mucho más limpio que almacenar datos accesibles a nivel mundial en alguna parte.
  • Cree un archivo Constants.h (solo archivo h) para su proyecto donde puede almacenar contants usados ​​en su proyecto, como alturas de fila estandarizadas, etc. No debe haber nada más que #define en este archivo.
  • Almacene los datos de inicio de sesión en el llavero, de esa manera es más seguro y si eliminan la aplicación y la vuelven a instalar por completo, aún está allí y no tiene que molestarlos con solicitudes de inicio de sesión.
  • Almacene la configuración de usuario personalizada para su aplicación en NSUserDefaults, esto los saca de su base de datos de modo que si tiene problemas de migración / otros datos (que posiblemente sean los únicos que no puede volver a cargar desde cero en su aplicación) no se ven afectados .
  • Obtenga solicitudes de datos centrales en diccionarios si los pasa a una vista, esto mantiene sus entidades de datos centrales fuera de sus puntos de vista y también hay un beneficio de rendimiento.
  • Siga las convenciones de Apple Cocoa para los nombres de variables y funciones . En caso de duda, siempre vea si Apple tiene una convención para eso.

Estos son solo de la parte superior de mi cabeza. Por supuesto, algunas personas pueden estar en desacuerdo con lo que escribí pero estos hábitos me funcionaron cuando comencé.


A menudo me olvido de escribir el return self; parte de mis constructores Afortunadamente, comencé a romper este hábito en particular.


Aprendí a odiar la interfaz @ # $% - er cuando era mucho menos útil y más problemática de lo que es ahora, y por lo tanto tiendo a crear toda mi UI en código, evitando constantemente IB. Es una tontería, ya que sé que reduce mi productividad en una tonelada, pero parece que no me molesto en pasar la tarde aprendiendo cómo conectar cosas en los IB. (Sí, sé cómo hacer las cosas simples, pero siempre me molesta cuando hay algunas cosas medianas, no simples que hacer, y el IB parece funcionar en mi contra).

Ok, me convenciste - Voy a romper ESO mal hábito este fin de semana.

¡Gracias! :)


Aquí hay algo mío:

Lanzar excepciones sin ningún intento de atraparlas. Empecé a confiar cada vez más en NSError para evitar que NSExceptions volara como una bala en una película de John Woo, pero todavía tengo muchos códigos excepcionales .

Escribir una clase rápida para hacer X, Y y Z y luego olvidarte de limpiar en dealloc. Leaks ahoy!

Usar cadenas directamente en varios lugares (KVO) en lugar de definir una constante y usar eso (ver la excelente publicación de blog de Dave Dribin en KVO para más información)


Cadenas de codificación rígida como botones / títulos de vista. Puro perezoso Ahora necesito sacar todo para apoyar la localización :(


Esto es algo genérico y no necesariamente específico del cacao, pero:

No se refactoriza lo suficiente debido a la pereza de tener que actualizar los archivos .m y .h.

XCode 3 hace que sea más fácil para ciertos tipos de refactorización como cambiar el nombre, pero me encontré refactorizando con menos frecuencia que en Java o C # y ese es un mal hábito que estoy tratando de romper.


Mal hábito: mantener mi mentalidad de Java.

Mi experiencia en Java me lleva a buscar obsesivamente un nulo antes de siquiera pensar en hacer algo con una variable, cuando podría estar haciendo uso de la capacidad de Objective-C de enviar un mensaje a cero. (Consulte: "¿Está enviando un mensaje a cero?" )

En lugar de tratar de atrapar un nulo preventivamente, tengo que recordarme a mí mismo que Objective-C me permite simplemente escribir código que funciona con gracia con valores de retorno de 0 o nil.


Me da pereza usar accesos dentro de las clases. Por lo general, el mayor problema es que no puedo distinguir fácilmente el alcance de la variable a primera vista. Luego pasé unas horas la semana pasada depurando un problema de corrupción de memoria que se debía al uso

self.displayName = name

en algunos lugares y

displayName = name

en otros. Me alegré cuando lo encontré y mi aplicación dejó de fallar. No estaba tan feliz de haber desperdiciado varias horas buscando un error evitable.


No unidad de prueba lo suficiente. Es realmente difícil limpiar y refactorizar código si no tiene pruebas de unidad. Y sin refactorización y limpieza constantes, la podredumbre del código comienza a establecerse y extenderse.

Usar el patrón singleton para compartir objetos, como + [MyObject defaultObject]. Esto es esencialmente una variable global que crea algunas buenas dependencias ocultas y un acoplamiento. Esto, a su vez, hace que el código sea más difícil de probar.


Uso #defines más a menudo donde debería estar usando las declaraciones de const.

Además, probablemente soy demasiado prolífico en las NSNotifications que arrojo; desacoplamiento corre fuera de control!


Uso incorrecto de enlaces para vincular las propiedades del objeto modelo entre sí. Este uso de Vinculaciones conduce a un código que es difícil de entender, difícil de depurar y difícil de probar. Utilice enlaces solo para vincular una interfaz de usuario a un controlador. Si necesita modelos desacoplados, use NSNotification en lugar de enlaces. Al menos es un poco más explícito que KVO.


Pasando NULL a argumentos que invocan NSError** , puro vago.