当我说阻止时,我的意思是:
^(int a) {return a*a;};
此外,block 仅适用于 iOS4 及以上版本。
这两者有什么区别?
当我说阻止时,我的意思是:
^(int a) {return a*a;};
此外,block 仅适用于 iOS4 及以上版本。
这两者有什么区别?
AnNSInvocation
是对象的消息(使用选择器),带有可选参数,可以稍后(或现在)执行,并且可以在当前上下文之外执行(当然,如果您移动它,请注意您复制的内容与保留或引用的内容)。NSInvocation
好处是您可以选择性地复制/引用您需要的内容。
该块是一个秘密的本地函数定义,它能够捕获当前线程上下文的一部分,或者完全捕获。它也比 an 更容易配置,NSInvocation
因为它自动捕获、复制和保留线程(或范围)本地上下文。块可以稍微增加你的二进制大小,类似于函数。如果脱离本地上下文(例如,当你复制一个块时),块可能需要更多的 CPU 时间和内存——与NSInvocation
.
NSInvocation
是一个封装消息调用的对象:目标对象、选择器、参数和返回值。块是一个对象,它封装了一段代码和一些关于导致该部分的程序状态的信息:特别是它记录调用堆栈上的变量,直到创建块。
这两者都可以清楚地用作回调:您可以使用调用向对象发送消息,或者您可以像执行函数一样执行块的代码。它们的不同之处在于您在每种情况下传输状态的方式。通过调用,您需要目标对象或参数之一来表示消息出现的上下文。对于一个块,这个上下文是从创建块时的状态自动捕获的。
说的很简单,NSInvocation
不如方块强大。它只是封装了对单个对象的单个方法调用,而块可以包装多行任意代码。如果没有现有类的支持,即使是非常简单的平方块也无法使用调用来表示,该类本身会进行平方。