Пожалуйста, объясните полезность блоков в Objective-C - PullRequest
1 голос
/ 21 октября 2011

Недавно я пытался понять важность блоков в программировании (в частности, Objective-C). Очевидно, они довольно часто используются в API iOS / Cocoa, поэтому я пытаюсь понять их.

В основном, я до сих пор не понимаю, почему вы бы использовали блок вместо простого создания вспомогательной функции. Например, если я создам блок, который реализует некоторую функцию сортировки, не будет ли проще создать эту функцию как метод вспомогательного класса, чтобы все объекты в коде могли использовать его более легко?

Ответы [ 2 ]

2 голосов
/ 21 октября 2011

Блоки - это хорошая альтернатива обратным вызовам или делегатам, хотя бы для улучшения читабельности кода путем сохранения вашей бизнес-логики локально по отношению к вызывающему коду.

Но они гораздо более полезны для асинхронностии необходимость, если вы хотите использовать GCD для повышения производительности.

Кроме официальных документов Apple, я настоятельно рекомендую прочитать отличные Практические блоки Майка Эша.

2 голосов
/ 21 октября 2011

Приятной особенностью блоков является то, что они могут использоваться везде, где могут использоваться объекты, например, вы можете, например, хранить блоки в массиве или словаре. Еще одна интересная вещь - вы можете передавать блоки внутри объекта или между объектами в качестве аргументов метода, например ::100100

- (void)processDataWithBlock:(void (^)(void))block
+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations

Второй метод - это даже UIView API. Можно утверждать, что функциональные указатели здесь подойдут, но это будет более сложным, менее гибким и непоследовательным. Кроме того, блоки могут обращаться к локальным переменным и переменным экземпляра, не передавая их в качестве аргументов.

Это мои 2 цента с точки зрения пользователя блоков, но я не эксперт ...

...