1
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/ |
2
wtl 2012-02-27 19:58:36 +08:00
这两者差别还是满大的
[invocation invoke]与[target action:parameter]是等价的 block最重要的是它维护了创建时的上下文,并可以修改其中的变量, 虽然长的像功能也像普通函数,但又可以被当做对象传递,这就有了无数可能: a.hello(); b = a.hello; b.hello(); 太灵活了...... |
3
wtl 2012-02-27 19:59:49 +08:00
笔误
a.hello(); b.hello = a.hello; b.hello(); |
4
holsety OP 我的理解是闭包和函数对象的区别。
虽然都是做同一件事情的。 |