Ответ Джейкоба хорош, однако ответить на часть о том, «как это отличается от указателя функции?»:
1) Блок является , а не указателем функции. Блоки - это то, как Apple пытается сделать функции первоклассными гражданами в C / C ++ / Objective-C. Это ново для iOS 4.0.
2) Зачем вводить эту странную концепцию? Оказывается, функции первого класса полезны в довольно многих сценариях, например, управление частями работы, которые могут выполняться параллельно, как в Grand Central Dispatch. Помимо GCD, теория настолько важна, что вокруг нее существуют целые программные системы. Лисп был одним из первых.
3) Вы увидите эту концепцию на многих других языках, но под другими именами. Например, Microsoft .Net имеет лямбда-выражения и делегаты (никак не связанные с делегатами Objective-C), в то время как наиболее общими именами являются, вероятно, анонимные функции или функции первого класса .