关于NSInvocation & Block的区别。

2012-02-27 18:50:06 +08:00
 holsety
http://stackoverflow.com/q/9463152/197116

从回答来看:

个人觉得最大的区别就是:上下文相关性。Invocation需要自己去维护变量的状态,而block会保存一分变量当前的状态。

不知道我理解的正确吗?
4258 次点击
所在节点    iDev
4 条回复
lldong
2012-02-27 19:42:42 +08:00
Objective-C是通过发送消息进行方法调用的,我的理解是:
NSInvocation对象是对一个消息的封装,包括消息的target,名称(selector),签名等,但是它本身不包含方法的实现代码,实现在target那里。
而Block其实就是匿名函数,可以包含具体的实现代码,而且具有闭包的特性,可以捕获其所在环境中的状态。参考: http://lldong.github.com/blog/2011/12/30/blocks/
wtl
2012-02-27 19:58:36 +08:00
这两者差别还是满大的

[invocation invoke]与[target action:parameter]是等价的
block最重要的是它维护了创建时的上下文,并可以修改其中的变量,
虽然长的像功能也像普通函数,但又可以被当做对象传递,这就有了无数可能:

a.hello();
b = a.hello;
b.hello();

太灵活了......
wtl
2012-02-27 19:59:49 +08:00
笔误
a.hello();
b.hello = a.hello;
b.hello();
holsety
2012-02-27 20:47:54 +08:00
我的理解是闭包和函数对象的区别。

虽然都是做同一件事情的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/28287

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX