bVC.callBackBlock,此时 callBackBlock 的指针就指向这个代码块。
调用 callBackBlock(NSString *text)
由于 callBackBlock 的指针是指向 A 中的 block 代码块,因此执行代码块的代码,实现回调。
很显然之前我忽略了代码块赋值给 callBackBlock 的这个操作(羞愧)。
现在再通过一段代码可以更清晰地理解这个原理:
bVC.callBackBlock = ^(NSString *text){ //1
NSLog(@"text is %@",text);
};
bVC.callBackBlock = ^(NSString *text){ //2
NSLog(@"text b is %@",text);
};
上述代码中,我们对 callBackBlock进行了两次赋值,结果会怎么样呢?

two block
可以看出来,Block 的回调只对代码 2 生效,因为callBackBlock的指针最后指向了代码 2 的代码块。所以并没有什么神奇的魔法,也没什么隐藏的底层机制(这里指的是方便理解的底层)让你可以带着疑惑去使用它。
总结
我这个人学习方法,总结起来就是看到新技术,先在自己的代码里跑一遍,能跑通,并且使用起来没有什么难度,就基本不会深究了。但是自我反思过,这样的学习方法是很不对的,写代码不能不求甚解,如果想要有所突破,不想局限于码农,一定要深入探究一下实现的机制,最起码要保证不带着疑惑去使用。以上就是这篇文章的全部内容,希望能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。
注:相关教程知识阅读请移步到IOS开发频道。










