繁体   English   中英

NSInvocation和block之间有什么区别?

[英]What's the difference between NSInvocation and block?

当我说阻止我的意思是:

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

此外,块仅支持iOS4及更高版本。

这两者有什么区别?

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

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

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

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

简单来说, NSInvocation不如块强大。 它只是将单个方法调用封装在单个对象上,而块可以包含许多行的任意代码。 即使你的非常简单的平方块也不可能在没有现有类支持的情况下使用调用来表示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM