2010-10-25 15 views
7

Si tengo una aplicación de barra de pestañas, y planeo usar Core Location en diferentes pestañas, ¿hay un buen lugar común para poner el código usado para asignar/iniciar el CLLocationManager, y obtener las actualizaciones una vez que se llama startUpdatingLocation? O si se va a usar en dos pestañas diferentes, ¿entonces simplemente lo coloco en el código de cada pestaña? Me pregunto cuáles son las mejores prácticas desde que soy nuevo en la programación. Gracias.Dónde poner el código común para iPhone, CLLocationManager

Respuesta

1

si nota que está duplicando lo que has escrito, o enfrentarse a la escritura de código que existe, considerar la creación de una interfaz (objeto, funciones de ajuste, etc.) para realizar estas tareas.

vea SECO (no se repita). Habrá una gran cantidad de funcionalidad duplicada para cuando hayas escrito algunas aplicaciones. lo mejor es escribirlo una vez y escribirlo correctamente.

Aquí hay algunas pautas de alto nivel:

  • no ponga características específicas de la aplicación en una interfaz común (en su lugar, utilizar una subclase compartida por los 2 proyectos)

  • siempre mantenga su bases libres de pirateo (a menos que se trate de un problema en las bibliotecas del sistema). si los clientes (por ejemplo, subclases, personas que llaman) necesitan una solución en particular o requieren un control específico, entonces es mejor hacer que lo manejen.

  • afirmaciones utilizar para asegurarse de que utilizan la interfaz como se pretende, comprobar cada argumento, precondición/condición posterior, el estado de su objeto, etc ..

  • mantener su objetos/las interfaces muy pequeños y fáciles de mantener, con una claro propósito de su uso previsto. naturalmente, esto dará como resultado una mayor cantidad de objetos.

  • evitar la tentación de utilizar únicos y datos estáticos; casi siempre hay una mejor manera, incluso si es tan simple como forzar a los clientes a crear una instancia de su clase.

  • crear bibliotecas con estas interfaces, y se dividen de manera lógica.

ahora que eso está cubierto ...

i empezaría usando (potencialmente) múltiples instancias de los objetos que necesita. no hay nada en la documentación que indique "no debe crear múltiples instancias del objeto".

si esto es de alguna manera inadecuado en la creación de perfiles, luego considere usar un objeto compartido que transmite mensajes a los objetos (en su aplicación) que necesitan actualizaciones.

justificación: lo más probable es que Apple ya haya optimizado la implementación, por lo que no es necesario.

finalmente, violé estas pautas en una aplicación que requería un montón de solicitudes de ubicación y mostraba una tonelada de información de ubicación. la aplicación utilizó algunos datos estáticos detrás de una interfaz que almacenaba el administrador de ubicación y la ubicación (entre otras cosas). así que terminé usando datos estáticos con datos estáticos privados (ocultos) para reducir la memoria y las demandas de la CPU en este caso.

-3

El delegado de la aplicación es un lugar bueno y central para tales datos. Siempre puede llegar al delegado de la aplicación con [[UIApplication sharedApplication] delegate]

5

No estoy de acuerdo con John, AppDelegate es la manera "fácil" de hacerlo, pero no siempre es la mejor.

Haría esto con un singleton. Puede consultar el artículo de Matt Gallagher en Singletons, AppDelegates and top-level data para referencia.

+0

No estoy de acuerdo con el uso de singletons. Considero que los singleton son tan malos como las variables globales, es más, * son * variables globales, y los evito tanto como sea posible. Obtengo el argumento "AppDelegate big-ball-of-mud", pero lo contrarrestaría si su AppDelegate está sobrecargado, probablemente necesite refactorizar. Una búsqueda rápida de SO muestra que soy [no] (http://stackoverflow.com/questions/228164/on-design-patterns-when-to-use-the-singleton/228380#228380) [solo] (http : //stackoverflow.com/questions/11831/singletons-good-design-or-a-crutch) sosteniendo esta opinión. –

+2

AppDelegate es en sí mismo un singleton. Es solo una cuestión de encapsulación. Diferentes singletons para diferentes tareas. Debes evitarlos cuando puedas, pero a veces son necesarios. ¿Hay una mejor manera de hacer clases como NSFileManager, NSUserDefaults que no sean singletons? ¿Acceder a ellos a través de AppDelegate? No lo creo. – gcamp

+0

AppDelegate es propiedad de UIApplication, el objeto raíz de toda la aplicación y (en la vista de purista) el único singleton válido permitido. –

Cuestiones relacionadas