Похожи ли блоки Objective-C на анонимные функции в JavaScript? - PullRequest
6 голосов
/ 16 сентября 2010

Я пытаюсь понять концепцию блоков.То, что я прочитал до сих пор, похоже, концептуально похоже на анонимные функции в JavaScript.Это правильно?

Ответы [ 2 ]

4 голосов
/ 03 января 2013

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

Например, если вы планируете использовать блок после / вне функции / метода, который определяетблок больше не активен - это тот случай, когда вы устанавливаете блок как свойство или используете его в GCD (многоядерная библиотека очередей операций), вам нужно скопировать его с помощью Block_copy() (или [aBlock copy]).Я не буду вдаваться в подробности, но это определенно не то, что вы делаете с JS (анонимными) функциями.Это связано с тем, что блоки литералы размещены в стеке (а не где-то в коде), и вам нужно скопировать его в кучу, если вы хотите, чтобы он сохранялся.

Это может быть довольно сложно (но довольно красиво по своему дизайну), но для большинства случаев использования это довольно просто, и вы можете рассматривать это как анонимные функции JS.; -)

3 голосов
/ 16 сентября 2010

Да.Блоки в Objective-C являются замыканиями.

...