5

当我说阻止时,我的意思是:

^(int a) {return a*a;};

此外,block 仅适用于 iOS4 及以上版本。

这两者有什么区别?

4

3 回答 3

4

AnNSInvocation是对象的消息(使用选择器),带有可选参数,可以稍后(或现在)执行,并且可以在当前上下文之外执行(当然,如果您移动它,请注意您复制的内容与保留或引用的内容)。NSInvocation好处是您可以选择性地复制/引用您需要的内容。

该块是一个秘密的本地函数定义,它能够捕获当前线程上下文的一部分,或者完全捕获。它也比 an 更容易配置,NSInvocation因为它自动捕获、复制和保留线程(或范围)本地上下文。块可以稍微增加你的二进制大小,类似于函数。如果脱离本地上下文(例如,当你复制一个块时),块可能需要更多的 CPU 时间和内存——与NSInvocation.

于 2012-02-27T10:15:59.417 回答
3

NSInvocation是一个封装消息调用的对象:目标对象、选择器、参数和返回值。块是一个对象,它封装了一段代码和一些关于导致该部分的程序状态的信息:特别是它记录调用堆栈上的变量,直到创建块。

这两者都可以清楚地用作回调:您可以使用调用向对象发送消息,或者您可以像执行函数一样执行块的代码。它们的不同之处在于您在每种情况下传输状态的方式。通过调用,您需要目标对象或参数之一来表示消息出现的上下文。对于一个块,这个上下文是从创建块时的状态自动捕获的。

于 2012-02-27T10:16:19.787 回答
0

说的很简单,NSInvocation不如方块强大。它只是封装了对单个对象的单个方法调用,而块可以包装多行任意代码。如果没有现有类的支持,即使是非常简单的平方块也无法使用调用来表示,该类本身会进行平方。

于 2012-02-27T10:13:08.133 回答