block的理解参照文章http://www.cnblogs.com/flyFreeZn/p/4264220.html
http://www.cocoachina.com/ios/20170122/18601.html
1.理解这个问题的关键在于理解被Block捕获的引用和在Block内定义的引用的区别
注意:根据Block的原理分析,被Block捕获的引用,是会被加到Block的结构体内的,当是ARC时,默认的Block都是在堆上的,所以被Block捕获的引用也是在堆上,而对于在Block内声明的引用,它 在函数中声明,存在于函数栈上。所以两者的生命周期是不一样的,被Block捕获的引用只有当Block被释放才被释放,而在Block内定义的引用在函数{}内存在,超出了就被自动释放了,也就是函数执行期间存在,函数执行完毕就被释放了。