两者都是为了实现回调功能。即自己是事件的产生者,自己自管调用事先约定好的函数(代理中是代理方法,block中就是block名),而具体的函数实现是不知道的,是有另一个类(业务类)自己去实现的。和c#中的委托还有JavaScript种的回调函数有点类似。