block知识总结
2016-03-21 14:32
253 查看
一.block在内存中存在的形式
1.当把block句法写在函数或者方法外面时,系统会在静态数据区分配一块内存区域给block对象。这片区域在程序执行期会一直存在。
2.当block句法写在函数或者方法内部时,block对象被分配在栈上。
3.当对block执行copy操作时,如果block在栈上,则复制到堆上,如果block本来已经在堆上,则不进行复制而直接返回堆上的对象增加该对象的引用计。
二.block内基本变量(非对象)的行为
block可以访问它所在函数体内该函数的变量,但是对于不同的变量类型,这些变量有不同的行为。
1.对于全局变量,block可直接访问和修改全局变量的值,因为当block访问它们时传递的是它们的指针。
2.对于static修饰的局部变量,block可直接访问和修改变量的值,同样是因为当block访问它时传递的是它的指针。
3.除以上两种外的局部变量(栈内变量),block只可访问值而不能修改,因为这种情况下是值传递,无法对原值进行修改。
4.如果想在block内修改函数的局部变量,要在变量前加__block修饰符,当block访问带有__block修饰的局部变量时,传递的是该变量的地址。
三.block内使用对象时的行为
1.方法内的block可以直接访问实例变量,也可以改变其值。
2.方法内的block中存在实例变量时,如果在栈上生成block的副本,retain就会被发送给self而非实例变量,引用计数器的值也会加1。实例变量的类型不一定非得是对象。
3.block句法内存在非实例变量对象是,如果在栈上生成某个对象的副本,包含的对象就会接收到retain,引用计数器的值也会增加。
4.已经复制后,堆区域中某个block即使受到copy方法,结果也只是block自身的引用计数器加1。包含的对象的引用计数器的值不变。
5.复制的块对象在被释放时,也会向包含的对象发送release。
四.ARC和非ARC下block的操作的区别
待续
五.使用block注意事项
待续
1.当把block句法写在函数或者方法外面时,系统会在静态数据区分配一块内存区域给block对象。这片区域在程序执行期会一直存在。
2.当block句法写在函数或者方法内部时,block对象被分配在栈上。
3.当对block执行copy操作时,如果block在栈上,则复制到堆上,如果block本来已经在堆上,则不进行复制而直接返回堆上的对象增加该对象的引用计。
二.block内基本变量(非对象)的行为
block可以访问它所在函数体内该函数的变量,但是对于不同的变量类型,这些变量有不同的行为。
1.对于全局变量,block可直接访问和修改全局变量的值,因为当block访问它们时传递的是它们的指针。
2.对于static修饰的局部变量,block可直接访问和修改变量的值,同样是因为当block访问它时传递的是它的指针。
3.除以上两种外的局部变量(栈内变量),block只可访问值而不能修改,因为这种情况下是值传递,无法对原值进行修改。
4.如果想在block内修改函数的局部变量,要在变量前加__block修饰符,当block访问带有__block修饰的局部变量时,传递的是该变量的地址。
三.block内使用对象时的行为
1.方法内的block可以直接访问实例变量,也可以改变其值。
2.方法内的block中存在实例变量时,如果在栈上生成block的副本,retain就会被发送给self而非实例变量,引用计数器的值也会加1。实例变量的类型不一定非得是对象。
3.block句法内存在非实例变量对象是,如果在栈上生成某个对象的副本,包含的对象就会接收到retain,引用计数器的值也会增加。
4.已经复制后,堆区域中某个block即使受到copy方法,结果也只是block自身的引用计数器加1。包含的对象的引用计数器的值不变。
5.复制的块对象在被释放时,也会向包含的对象发送release。
四.ARC和非ARC下block的操作的区别
待续
五.使用block注意事项
待续
相关文章推荐
- c#正则表达式
- 使用Xcode查找项目中的中文字符串
- [ActionScript 3.0] LocalConnection示例
- iOS 开发--动画
- SpringBoot 配置文件 application.properties
- slidingmenuDemo
- Android AutoLayout全新的适配方式 堪称适配终结者
- [通用类]---代码计算适配
- 架构设计:生产者/消费者模式 第5页:环形缓冲区
- 架构设计--消息队列
- 数据结构1 -- 链表的基本方法实现
- js-闭包
- 为克服HTML在构建应用上的不足而设计! AngularJS简介!零玖玖教育
- 复利计算器3.0
- jquery下的this,$(this),$(this).get(0);
- iterm2 快捷键大全 Mac item2常用快捷键
- 见怪不怪的typedef
- 重识iOS
- Tiny4412标准版,编译u-boot并烧录到SD卡,从SD卡启动后只打印‘OK’两个字符
- HTML标签的id可以是中文