2010-10-13 12 views
10

¿Objective-C admite bloques "a la Smalltalk"?bloques Smalltalk en Objective-c?

En Smalltalk, los bloques son similares a "cierres" o "expresiones lambda" o "funciones sin nombre" que se encuentran en otros idiomas.

+1

Consulte esta pregunta para obtener algunos enlaces adicionales: http://stackoverflow.com/questions/2516325/futures-for-objective-c –

+0

¡Excelente enlace, gracias! – cfischer

Respuesta

10

Sí: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Blocks/Articles/00_Introduction.html

Fuera de la caja, sólo están soportados en la versión de Objective-C 2.0 que viene con XCode 3.2 o posterior . Esto significa que necesitarás Snow Leopard si quieres usar las herramientas de compilación oficiales. Aquí se describe una solución potencial para 10.5: http://thirdcog.eu/pwcblocks/#leoiphone

+2

Pero hay aspectos distintos en un aspecto: la forma en que regresas de él. – mathk

+0

(solo una nota) La versión correspondiente de iOS también admite la función C-Blocks. – Eonil

6

Sí, tomar este ejemplo:

[[myString componentsSeparatedByString:@"\n"] enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    NSString *line = (NSString *)obj; 
    //do what your going to do with line... 
}]; 
+0

¿Estoy interpretando este código correctamente? ¿Puede ObjC manejar bloques escritos arbitrariamente, o solo bloques explícitamente tipados? – mcandre

+1

@mcandre objetivo-c no es un lenguaje fuertemente tipado. Puede pasar un 'id' o' void * 'y convertirlo al tipo que desee. –