guidelines functions ios arrays swift struct refactoring

ios - guidelines - naming functions swift



Swift Struct vs Class: ¿cuál es el tamaño de pila permitido? y refactorizando una clase a una estructura. (1)

Mientras que la estructura en sí misma vive en la pila, la matriz de datos vive en el montón, por lo que la matriz puede crecer de tamaño dinámicamente. Entonces, incluso si tiene una matriz con millones de elementos en ella y la pasa a alguna parte, ninguno de los elementos se copia hasta que cambie la nueva matriz debido a la implementación de copy-on-write . Esto se describe en detalle en la Sesión 414 de la WWDC 2015 .

En cuanto a la segunda pregunta, creo que la Sesión 414 de la WWDC 2015 nuevamente tiene la respuesta. Los controles básicos que los ingenieros de Apple recomiendan para los tipos de valor son:

Use un tipo de valor cuando:

  • Comparar datos de instancia con == tiene sentido
  • Quieres que las copias tengan estado independiente
  • Los datos se utilizarán en el código en varios subprocesos

Use un tipo de referencia (por ejemplo, use una clase) cuando:

  • Comparar la identidad de instancia con === tiene sentido
  • Quieres crear estado mutable, compartido.

Entonces, por lo que ha descrito, creo que los tipos de referencia se ajustan mucho mejor a Processor y Analyzer . No parece que las copias de Processor and Analyzer sean objetos válidos si no ha creado nuevos Producer y Analyzer s explícitamente. ¿No querrías que los cambios en estos objetos sean compartidos?

En primer lugar, entiendo la diferencia entre los tipos de valor y referencia, esta no es la pregunta. Estoy reescribiendo parte de mi código en Swift, y decidí también refactorizar algunas de las clases. Por lo tanto, pensé que vería si algunas de las clases tuvieran sentido como estructuras.

Memoria: Tengo algunas clases de modelos que contienen arreglos muy grandes, que están creciendo constantemente en tamaño (tamaño final desconocido) y podrían existir por horas. Primero, ¿hay alguna guía sobre un tamaño sugerido o absoluto para una estructura, ya que vive en la pila?

Uso de refactorización: Ya que estoy refactorizando lo que en este momento es un desastre con demasiada dependencia, me pregunto cómo podría mejorar eso. Las vistas y los controladores de vista son en su mayoría fáciles, es mi modelo, y lo que hace es que siempre me deja con ganas de que sigan mejores ejemplos.

WorkerManager : Singleton que contiene uno o dos Worker s a la vez. Uno siempre estará registrando nuevos datos de un sensor, y el otro revisará los datos almacenados. Los controladores de vista obtienen la referencia de Worker del WorkerManager y le piden al Worker que muestre los datos.

Worker : hace todo en una cola para evitar problemas de acceso a la memoria (los punteros de la matriz C cambian constantemente a medida que crecen). Escucha: el Worker escucha escucha nuevos datos, los envía a un objeto Processor (que creó) que limpia los datos y los almacena en arrays C que tiene el Worker . Luego, si hay datos válidos, el Worker le indica al Analyzer (que también es propiedad del trabajador) que analice los datos y los almacene en otras matrices de C que se enviarán a las vistas. Tanto el Processor como el Analyzer necesitan un estado para saber qué sucedió en el pasado y qué procesar y analizar a continuación. Los datos sin procesar puros se almacenan en un objeto NSManaged de Record separado. El revisor toma un Record y utiliza los datos puros en bruto para recrear todos los datos analizados para que puedan revisarse. (Los datos analizados son masivos, y no quiero almacenarlos en el disco)

Ahora, mi segunda pregunta es, ¿podrían o deberían reemplazarse Processor y Analyzer con estructuras? ¿O tal vez los protocolos para el Worker ? No son realmente "objetos" en el sentido normal, solo son grupos convenientes de métodos relacionados y el estado necesario. Y dado que el código es de casi mil líneas para cada uno, y no quiero ponerlo todo en una clase, ni siquiera en el mismo archivo.

Simplemente no tengo un buen sentido de cómo eliminar todo mi estado, usar funciones puras para todas las operaciones matemáticas complejas que se realizan en las matrices y dónde colocarlas.