码迷,mamicode.com
首页 > 其他好文 > 详细

杂记---不定期更新

时间:2015-09-18 18:11:06      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:

1.data source也是一种特殊的delegate,data source负责传输数据给View例如data、at、count等,而delegate负责处理View的did、should、will等问题,View把需要的数据信息或者事件信息传输给dalegate,dalegate则负责回复这些信息。

2.Block当中不能修改局部变量的值,在block中,局部变量都是只读的,比如在block外部有一个BOOL value = YES;,如果在block内部修改value的值,这就是非法的,编译器会报错。当然,有一种办法可以进行读写,就是在变量前面加上两个下划线和block,如:__block BOOL value = YES;,这样就可以在block当中进行该变量的读写了。

原理是如果声名了__block,编译器就会生成一段代码将value从栈(stack)移到堆中(heap),同时编译器会有一个强指针指向block中的每一个变量,确保它不会在block执行完毕前就离开堆,当执行完block的时候,编译器将信息拷贝回堆当中,然后再移回栈当中,同时强指针会在block goes out of scope*1之前一直存在。

3.如果block不需要参数,参数的括号可以直接省去,如果返回值再return的时候可以直接看出来,比如return [MyClass isKindOfClass:...];,这种类型的编译器会自动完成返回值,所以block的返回值类型也可以省去。

 


突然感觉学的好像有点快了,开始回头看以前知识的详细解释。

*1:英语不是很好,我的理解是block也是有作用域的,比如[UIView animateWithDuration:NSTimeInterval animations:^(void)animations]这个方法,再执行完该方法的时候可能block就已经失效了,block的作用与就是这一条语句,当然这是我的猜测,如有了解的请务必纠正我。

杂记---不定期更新

标签:

原文地址:http://www.cnblogs.com/zthek/p/4819676.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!