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