当我说“块”时,我的意思是:
^(int a) {return a*a;};
此外,仅支持iOS4及以上版本的是block。
这两者有何区别?
当我说“块”时,我的意思是:
^(int a) {return a*a;};
此外,仅支持iOS4及以上版本的是block。
这两者有何区别?
NSInvocation
是向一个对象发送消息(使用选择器),带有可选参数,它可以在稍后(或现在)执行,并在当前上下文之外执行(当然要注意如果您移动它,需要复制还是引用)。NSInvocation
的好处是你可以选择性地只复制/引用你所需的内容。NSInvocation
,它也更容易配置,因为它会自动捕获、复制和保留线程(或作用域)的本地上下文。与函数类似,块也可能会略微增加您的二进制文件大小。但如果将块从本地上下文中移除(例如,当您复制一个块时),与NSInvocation
相比,块可能需要更多的CPU时间和内存。NSInvocation
是一个对象,它封装了一个消息调用:目标对象、选择器、参数和返回值。而块是一个对象,它封装了一段代码以及关于程序状态的一些信息,具体来说,它记录了在创建块之前调用堆栈上的变量。NSInvocation
比 Blocks 功能弱。它只封装了单个对象上的单个方法调用,而 Blocks 可以封装任意代码行数。即使是最简单的平方 Blocks,如果没有现有类支持计算平方,使用 NSInvocation 表示是不可能的。