2010-08-23 11 views
13

¿Cuál es la ventaja de usar bloques sobre métodos y funciones normales en Objective-C? He leído la documentación, pero no puedo encontrar usos específicos de bloques en lugar de otras características del lenguaje.¿Cómo se diferencian los bloques de los métodos y funciones normales en Objective-C?

Estoy seguro de que me he perdido algo, entonces alguien podría explicar las ventajas de los bloques de una manera más simple que la documentación existente?

Respuesta

10

Me gusta el "A Short Practical Guide to Blocks" de Apple como una introducción al concepto.

Además, casi todos los recursos señalados en respuesta a la pregunta "Suggested resources for learning about blocks in Snow Leopard" se aplicarían aquí.

En la parte superior de los recursos allí, recomiendo los artículos "Cocoa for Scientists (Part XXVII): Getting Closure with Objective-C" y "Cocoa for Scientists (XXXIII): 10 Uses for Blocks in C/Objective-C" por Drew McCormack, así como "Programming with C Blocks" por Joachim Bengtsson.

El WWDC 2010 videos para sesiones 206 - "Introducción a Blocks y Grand Central Dispatch en iPhone" y 211 - "Simplificación del desarrollo de aplicaciones de iPhone con Grand Central Dispatch" también valen la pena.

+0

no busco bloques en snoe leopard, pero para iPhone y iPad, y en cuanto al primer enlace no estoy muy impresionado con la forma en que se ha explicado allí. ¿Me puede sugerir algunos códigos de inicio para bloques? gran ayuda. –

+0

@Ajay Pandey - No hay diferencia funcional entre los bloques en Snow Leopard y los de iOS 4.0. La sintaxis del idioma es la misma y Grand Central Dispatch es el mismo, por lo que todos los enlaces se aplican aquí. Pedir, por ejemplo, código para bloques es como pedir un código de ejemplo para métodos o funciones. Es una característica del lenguaje central, por lo que es difícil crear un ejemplo realmente básico. –

+0

@Ajay Pandey - Agregué algunos recursos más en mi respuesta que pueden ser útiles. –

13

Los bloques son una forma de completar un código y almacenarlo de manera efectiva para usarlo más adelante. Un bloque se usa comúnmente en lugar de una función de devolución de llamada. Las API más nuevas en el SDK de iPhone usan bloques de esta manera. La API tomará un "bloque" de código que se ejecutará al finalizar.

Se evita tener que crear sus propios hilos y mantener el estado de cada hilo, gestionar cerraduras, piscinas configuración autorelease etc.

Cuando se utiliza con los Grand Central Dispatch (GCD) bloquea API se puede ejecutar en colas y porciones enteras de código pueden ejecutarse de forma asíncrona con muy poco esfuerzo, pero manteniendo la robustez requerida para el código multiproceso.

+0

Entiendo que es importante cuando se trata de utilizar con GCD, pero aparte de esto, me resulta difícil entender los términos como devolución de llamada y muchas cosas como esta. La documentación ha utilizado terminología compleja, así que estoy aquí si alguien puede decir el uso real de bloques en el lenguaje de principiantes. Por favor, manténlo simple y se puede explicar algún código, eso será genial ... Gracias –

+4

@Ajay Pandey - ¿Qué lenguaje específico te está causando problemas? Una devolución de llamada es un método o función que se activa en respuesta a algo que sucede dentro de la aplicación o sistema. Los bloques pueden permitirle definir acciones que tienen lugar en respuesta a un evento, pero en lugar de obligarlo a escribir un método o función por separado, le permiten escribir el código de manejo justo donde configura el oyente para ese evento. Esto puede ahorrar un desorden de código y hacer que su aplicación sea mucho más organizada. –

+0

eso entendí, pero ahora recibí confirmación. Gracias. –

Cuestiones relacionadas