viernes, 11 de febrero de 2011

Blocks en Objective-C (iOS 4)

Me acabo de enterar, que a partir de iOS 4, el lenguaje Objective-C soporta blocks. ¡Espectacular!

Les recomiendo que lean:

La sintaxis para declarar un block, es un tanto extraña... Por ejemplo, si queremos declarar un block que recibe un número entero y devuelve otro número entero, por ejemplo multiplicando el parámetro por 3, se declara así:
^ (int num) {
    return num * 3;
}
Este block se puede asignar a una variable, por ejemplo con
(int)(^por3)(int) = ^ (int num) {return num * 3;};
y luego invocarlo con:
int result = por3(7);  // result = 21
o se puede pasar como parámetro a algún método que reciba un block con el tipo dado:
[someObject someMethodWithBlock:^ (int num) {return num * 3;}];
Los blocks no están tan integrados al lenguaje como lo están por ejemplo en Ruby, pero es bueno ver que en iOS 4 Apple agregó a varias clases la posibilidad de pasarles blocks cuando resulta útil. Citando lo que dice la documentación oficial:
One obvious motivation for using blocks is that an increasing number of the methods and functions of the system frameworks take blocks as parameters. One can discern a half-dozen or so use cases for blocks in framework methods:
  • Completion handlers
  • Notification handlers
  • Error handlers
  • Enumeration
  • View animation and transitions
  • Sorting

No hay comentarios.:

Publicar un comentario