Cómo utilizar objetos de bloque en su aplicación para ios

Video: MoneyWiz 2 - Finanzas personales en iOS - iPhone y iPad

bloques de Objective-C son como las funciones tradicionales de C en que los bloques son unidades pequeñas y autónomas de código en su aplicación para iOS. Ellos se pueden pasar como argumentos de funciones y métodos y luego usan cuando se necesitan para hacer algún trabajo. (Al igual que muchos temas de programación, la comprensión de los objetos de bloque es más fácil cuando los utiliza.)

Con iOS 4 y versiones más recientes, un número de métodos y funciones de los marcos del sistema están empezando a tomar bloques como parámetros, incluyendo los siguientes:

  • manipuladores de finalización

  • manipuladores de notificación

  • controladores de errores

  • Enumeración

  • Ver animación y transiciones

  • Clasificación

A continuación, se llega a utilizar un método basado en bloques para animar un coche, pero los objetos de bloque también tienen una serie de otros usos, especialmente en Grand Central Dispatch y el NSOperationQueue clase, las dos tecnologías recomendadas para el procesamiento concurrente. Siéntase libre de visitar el procesamiento simultáneo.

Uno de los valores de uso de bloques es que se puede acceder a las variables locales (así como variables de instancia), que no se puede hacer en una función o una devolución de llamada. También no tiene que pasar los datos alrededor - un bloque puede modificar las variables para pasar los datos de vuelta. Además, si necesita cambiar algo, no hay API para cambiar, con su efecto dominó concomitante.

A veces es más fácil de seguir lo que está pasando al declarar una variable de bloque y de paso, que como argumento al método. La sintaxis de declaración, sin embargo, es similar a la sintaxis estándar para los punteros de función, excepto que se utiliza un símbolo de intercalación (^) en lugar de un puntero de asterisco (*).

Si nos fijamos en animateWithDuration: animaciones: completado: en el UIView referencia de clase, verá

+ (Void) animateWithDuration: (NSTimeInterval) durationanimations: (void (^) (void)) animationscompletion: (void (^) (BOOL terminado)) Terminación-

Apple está tratando ahora a bloques como un patrón de diseño principal, la altura de la herencia y la delegación - por lo que no se sorprenda de encontrar bloques están utilizando cada vez más.

Sin embargo, debido a que es un poco avanzado, el código se ha investigado en profundidad por lo que se siente cómodo con bloques, a pesar de la sintaxis muy raro.

Para empezar, esta es la sintaxis que define animaciones como un bloque que no tiene parámetros y no devuelve ningún valor:

void (^) (void)) animaciones

terminación se define como un bloque que no tiene ningún valor de retorno y toma un único parámetro argumento booleano:

 (Void (^) (BOOL terminado)) finalización

Cuando se crea un bloque en línea, sólo tiene que utilizar el operador de intercalación (^) para indicar el comienzo de un bloque y luego seguir con el código encerrado dentro de las llaves normales. Eso es lo que estaba pasando con

animaciones: ^ {self.car.center = centro-}

y

completado: ^ (BOOL terminado) {[auto rotar] -}

Aunque en este ejemplo se utiliza bloques en línea, también se puede declarar como cualquier otra variable local. Agregue el código en negrita a su prueba de conducción método de sustitución de lo que ya tiene en ese lugar.

- (IBAction) Testdrive: (id) remitente {center CGPoint = CGPointMake (car.center.x, self.view.frame.origin.y + car.frame.size.height / 2) - vacío (^ Animación) () = ^ () {self.car.center = centro-} -vacío (^ Finalización) (BOOL) = ^ (BOOL acabado){[Girar auto] -} -[UIView animateWithDuration: 3 animaciones: animación completado: finalización] -}

Cuando se declara un bloque, se utiliza el operador de intercalación (^) para indicar el comienzo de un bloque con el código encerrado dentro de las llaves normales, y un punto y coma para indicar el final de una expresión de bloque.

Video: Minecraft: 6 cosas que no sabías del Faro - Rabahrex

La declaración en el listado 10-2 es más o menos lo mismo que se ve en la siguiente animateWithDuration: animaciones: completado: declaración de método, excepto que los identificadores se han movido un poco. Ambos están en negrita para hacer que un poco más fácil de ver:

+ (void) animateWithDuration: (NSTimeInterval) durationanimations :(void (^) (void))animationscompletion :(void (^) (BOOL terminado))terminación-

Aquí, usted está declarando dos bloques de variables utilizando el operador ^: una con el nombre de animaciones que no tiene ningún valor de retorno, y una con el nombre de terminación que no tiene ningún valor de retorno y toma BOOL como único argumento:

void (^ animación) () void (^ finalización) (BOOL)

Esto es como cualquier otra declaración de variables (int i = 1, por ejemplo), en la que se sigue el signo de igualdad con su definición.

Se utiliza el ^ operador de nuevo para indicar el comienzo de la bloque literal - la definición asignada a la variable de bloque. El bloque literal incluye nombres de argumentos (terminado), Así como el cuerpo (código) del bloque y se termina con un punto y coma:

vacío (^ Animación) () = ^ () {Self.car.center = centro -} -vacío (^ Finalización) (BOOL) = ^ (BOOL acabado){[Auto girar] -} -

Después de hacer conseguir la caída de bloques, encontrará todo tipo de oportunidades de utilizarlas para simplificar el código.

Artículos Relacionados