programación iOS, Objective-C, la orientación a objetos y diseño orientado a objetos van juntos. Siga leyendo para conocer algunos consejos rápidos votos para OO Diseño. Es hora de ponerse al día!
El diseño de las clases "buenas"
Sus clases deben ser altamente cohesivo y débilmente acoplado. Aquí está una lista de comprobación para comprobar rápidamente si una clase es buena: Una respuesta "No" a cualquiera de las preguntas significa que es posible que tenga que replantearse su clase.
¿Puede dar la clase un nombre que captura su razón de ser?
¿Puedes darle una descripción que dice que lo hace una sola cosa?
¿Tiene responsabilidades (métodos)? ¿Son todas las responsabilidades en la alineación con la descripción?
¿Tiene colaboradores?
¿Se - o sus componentes - mantener el estado de larga duración?
Haciendo un tipo de una subclase de una clase existente o utilizar la delegación
Digamos que usted necesita un tipo llamado Tigre y parece compartir las responsabilidades de un animal. Por lo tanto, usted está tratando de decidir si debe declarar tigre como una subclase de una clase denominada Animal, o tal vez declarar una variable miembro de tipo animal y delegar responsabilidades animalistas a esta variable miembro.
Decir estas dos frases en voz alta:
Tiger ES-A un animal.
Tiger CAN-ser un animal.
Si el primero tiene más sentido (que en este caso lo hace), Tiger debe ser una subclase de Animal.
El cumplimiento de los métodos y plataformas iOS App
Al escribir una aplicación para iOS, es muy importante entender y tejer código de aplicación específica en su ciclo de vida. Tratando de averiguar qué método del ciclo de vida de usar? Compruebe esta lista:
Usar willFinishLaunchingWithOptions hacer cualquier derecho de procesamiento después de la aplicación se pone en marcha y antes de que muestra su primera ventana, y antes de que incluso tiene un estado restaurado.
Normalmente se utiliza este método para comprobar si los parámetros de inicio de la aplicación (por ejemplo, una URL) son correctas. También puede comprobar el entorno en el que se lanza la aplicación (por ejemplo, no se lanzará en un iPad que tiene la capacidad de hacer llamadas celulares). Por cierto, este método no funcionará en un dispositivo con una versión iOS mayores de iOS 6.
Usar didFinishLaunchingWithOptions hacer cualquier procesamiento después de que usted esté seguro de que la aplicación va a empezar.
Por ejemplo, puede utilizar este método para restaurar un estado global.
Usar applicationDidBecomeActive con el fin de reiniciar un proceso que se detuvo mientras la aplicación estaba inactivo.
Por ejemplo, usted podría comenzar a escuchar los cambios de ubicación o incluso actualizar la interfaz de usuario con los datos nuevos.
Usar applicationWillResignActive para hacer una pausa a su aplicación mientras el usuario presta su atención a otra actividad - como contestar una llamada telefónica.
Usar applicationDidEnterBackground para liberar recursos y guardar los datos del usuario, junto con suficiente información de estado aplicación para restaurar la aplicación a su estado actual en caso de que se termina más tarde.
Se le permite aproximadamente cinco segundos de procesamiento en este método, por lo que no hace ninguna tarea que no puede terminar - como preguntar al usuario.
Usar applicationWillEnterForeground para deshacer lo que hiciste en applicationDidEnterBackground.
Usar applicationWillTerminate para realizar ninguna tarea de limpieza finales.
Cómo hacer que su iOS Apps aptos para la alimentación
el desempeño del programa iOS es más de los procesos de fondo. Algunos trucos simples pueden ahorrar tiempo y aumentar el rendimiento. Para la historia recta, echa un vistazo a estos consejos.
Encontrar rápidamente y la apertura de los archivos pertinentes en Xcode
Utilice el comando Abrir rápidamente para encontrar y abrir un archivo en una línea específica, utilizando su nombre de archivo, el tipo, o un símbolo en el archivo (como un nombre de variable o función), de la siguiente manera:
Elija Archivo- Abrir rápidamente.
En el campo de búsqueda, escriba caracteres en el nombre del archivo o símbolo que desea ver.
Escriba un punto seguido de uno o más caracteres de la extensión de nombre de archivo.
Para tener el archivo abierto en una línea específica, escriba dos puntos seguido del número de línea.
Elija un archivo de la lista de resultados.
Este diálogo también le permite decidir dónde colocar un archivo en Xcode. Sólo tiene que pulsar y mantener CMD + OPT + SHIFT mientras haga doble clic en el archivo.
Configuración de los comportamientos
Puede configurar el modo en Xcode responde a los eventos comunes mediante el establecimiento de su comportamiento mediante la página de configuración de Xcode-Preferencias-Comportamiento para establecer las preferencias de comportamiento.
Por ejemplo, puede hacer que aparezca un cierto conjunto de pestañas cuando Xcode se ejecuta la aplicación. O, si falla una acumulación, puede hacer Xcode guardar una instantánea y abrir la zona de depuración en la ventana de su espacio de trabajo.
Creación de un archivo .gitignore
Xcode puede conectar fácilmente con git, un sistema de gestión de código fuente popular. Si se utiliza sin ninguna configuración, git intentará archivar todo en un proyecto, incluso archivos con código compilado objeto, ejecutables y archivos temporales utilizados por Xcode.
Para solucionar este problema, es necesario crear git configure adecuadamente. Para ello, vaya a la carpeta del proyecto y crear un .gitignore presentar con el siguiente contenido:
OS X Finder.DS_Store # Xcode configuración por usuario * .mode1 * .mode1v3 * .mode2v3 * .perspective * .perspectivev3 * .pbxuser * .xcworkspacexcuserdata productsbuild # Construir / *. * O * .LinkFileList .hmap # archivos de copia de seguridad automática * ~ .nib / *. swp * ~
Apareciendo una vista Alerta
Su aplicación a menudo tiene que aparecer una alerta para que el usuario sepa algo sucedió y que ella tiene una opción de acciones. Aquí está una lista de comprobación rápida de cómo configurar una alerta.
Implementar el clickedButtonAtIndex método en la clase que hará que la alerta para que aparezca.
El siguiente código de ejemplo muestra cómo hacerlo:
- (void) alertView: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) buttonIndex {if (buttonIndex == 0) {[auto playNewGame] -} else if (buttonIndex == 1) {}} Regresar-
Crear, inicializar y mostrar la alerta.
El siguiente fragmento de código muestra cómo hacerlo:
UIAlertView * alerta = [[UIAlertView alloc] init] - [setTitle alerta: @ "Game Over!"] - [SetMessage alerta: @ "? Jugar otro juego"] - [addButtonWithTitle alerta: @ "Sí"] - [addButtonWithTitle alerta : @ "No"] - [setDelegate alerta: self] - [Muestra alerta] -
Conexión del iOS Apps
Su aplicación iOS puede necesitar comunicarse con una variedad de otros recursos. Afortunadamente, la caja de herramientas iOS tiene una variedad de conexiones especializadas. Elige uno y ponerlo a trabajar.
La apertura de un navegador desde su aplicación
Aquí está una manera rápida y sucia de tener su aplicación abrir una página web en un navegador. Vea el siguiente código de ejemplo:
- (IBAction) helpViaBrowser: (id) remitente {[[UIApplication sharedApplication] openURL: [NSURL URLWithString: @ "http://en.wikipedia.org/wiki/Tictactoe"]] -
¡Sí, es así de simple!
La conversión de una dirección a una de geolocalización
La mayoría de mapeo o aplicaciones basadas en la ubicación tienen una necesidad de convertir una cadena de texto que contiene una dirección o un lugar coordenadas geo-codificados a. Por suerte el marco iOS ofrece un geocodificador incorporado. El siguiente código muestra cómo utilizar el geocodificador:
# 133-NSString * FindString = [Texto findTextField] - // la cadena se lee de un campo de texto [migeocodificador geocodeAddressString: FindString completionHandler: ^ (NSArray * marcas de posición, NSError * error) {MKPlacemark * aPlacemark = [marcas de posición objectAtIndex: 0] - // aPlacemark contiene la información geocodificada # 133 -}] - # 133-
Las pruebas para capacidades de red
Es una buena idea probar lo que se dispone de capacidades de la red antes de su aplicación intenta utilizar la red. He aquí cómo usted puede hacer esta prueba:
Usted tiene que traer en dos archivos adicionales - a saber, Reachability.h y Reachability.m - desde el sitio web de Apple Developer en su proyecto.
Usted puede encontrar estos archivos aquí: https://developer.apple.com/Library/ios/samplecode/Reachability/Reachability.zip.
Usted tiene que incluir Reachability.h en el código.
El siguiente fragmento de código muestra cómo ver qué red está disponible:
+ (void) {// listCapabilities Testing para el networkNSString * networkReachability = nil-Accesibilidad * reachFacade = [Accesibilidad reachabilityForInternetConnection] Estado -NetworkStatus = [reachFacade currentReachabilityStatus] -si (estado == NotReachable) networkReachability = @ "Sin red n" - else if (estado == ReachableViaWiFi) networkReachability = @ "Wifi disponibles n" -else si (estado == ReachableViaWWAN) networkReachability = @ "WAN disponibles n" - # 133- [textVal appendString: networkReachability] - # 133-}
A partir de sensores
Antes de que pueda leer los valores detectados, hay que iniciar y configurar el gestor de movimiento. El siguiente código muestra cómo hacerlo:
# 133 - // Establecer el movimiento managerself-> MotionManager = [[alloc CMMotionManager] init] -self-> motionManager.accelerometerUpdateInterval = 1-auto> motionManager.gyroUpdateInterval = 1-auto> MotionManager. magnetometerUpdateInterval = 1- # 133-
Sin embargo, acaba de empezar el gestor de movimiento no es suficiente. Usted también tiene que iniciar la supervisión de los sensores, como se muestra aquí:
- (IBAction) startMonitoringSensors:(id)sender{[self->motionManagerstartAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler: ^ (CMAccelerometerData * accelerometerData, NSError * error) {[auto handleAccelerationUpdates:accelerometerData.acceleration]-}]-[self->motionManagerstartGyroUpdatesToQueue:[NSOperationQueue currentQueue] withHandler: ^ (CMGyroData * gyroscopeData, NSError * error) {[auto handleGyroUpdates:gyroscopeData.rotationRate]-}]-[self->motionManagerstartMagnetometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler: ^ (CMMagnetometerData * magnetometerData, NSError * error) {[auto handleMagnetometerUpdates: magnetometerData. campo magnético]-}]-}