A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 无色无味 中级黑马   /  2016-3-17 18:55  /  1510 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 无色无味 于 2016-3-17 18:56 编辑

在block内部可以访问外部变量?放在那个区?怎么修改变量呢?修改之后的变量放在那个区?还可以继续使用原来变量吗?;在block内部可以定义变量吗?定义的变量又放在那个区?全局变量和静态变量在block内部可以直接修改吗?block分几类?什么是全局block?什么是栈block?什么又是堆block?

7 个回复

倒序浏览
好复杂, 我也想知道这些答案
回复 使用道具 举报
加油加油
回复 使用道具 举报
你一下问那么多  - -  你就不能整理下思路列个条条框框的
1.block可以访问外部变量,外部变量是是复制一个值给内部变量.  复制的那个值是常量 放在常量区,不能再修改
block内部是代码块 可以定义变量.  
好了 我编不下去了~
回复 使用道具 举报
本帖最后由 alotofleo2 于 2016-3-18 21:49 编辑




在block内部可以访问外部变量?
可以
放在那个区?
ARC下的非全局block 机制是将外部变量全都copy到它所在的堆区的一个结构体中
怎么修改变量呢?
我们现在一般研究的是ARC下,想要修改外部变量的值,首先得在外部变量的定义类型前加__block ,这时候代码读到block行时,就不再是之前的单纯copy了,而是分别在不同的结构体中创建了一个指针和一个变量(并且将__block的变量值copy给它),当读取到修改变量的代码时,其实底层是讲代码转换成了这个指针去指向新创建的变量的空间(因为堆区不像栈区变量可以直接访问)
修改之后的变量放在那个区?
堆区
还可以继续使用原来变量吗?;
不能
在block内部可以定义变量吗?
可以
定义的变量又放在那个区?
栈区
全局变量和静态变量在block内部可以直接修改吗?
可以
block分几类?
三类
什么是全局block?
第一在所有函数以外的block
什么是栈block?
在MRC下可以是引用外部变量的block,但是ARC下编译器已经没有了栈block而将除了global以外的block都放在了堆区
什么又是堆block?
MRC下 栈block 的copy,但是ARC下都是堆block

最后:总结一下,其实block 只是一个数据结构,这种数据结构在生成时就会将外部的局部变量copy(全局变量不copy)到它自己的某个结构体中
并且这个数据结构中有函数.结构体等
并且在某个结构体中含有一个isa指针所以它也是一个对象,
它的最终实现还是一个函数.

回复 使用道具 举报
alotofleo2 发表于 2016-3-18 21:37
在block内部可以访问外部变量?
可以
放在那个区?

楼上解答的非常详细,我还真不知道block有这么多分类和区别,谢谢!
回复 使用道具 举报
虽然还没学到,但是先看看
回复 使用道具 举报
alotofleo2 发表于 2016-3-18 21:37
在block内部可以访问外部变量?
可以
放在那个区?

厉害{:2_30:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马