首页 > 试题广场 >

Block在未引用外部变量时,存储在哪个内存区域?( )

[单选题]
Block在未引用外部变量时,存储在哪个内存区域?( )
  • 全局区
  • 堆区
  • 栈区
  • 常量区
我在看这题的解析的时候,为什么底下的广告飘上来了,网站的bug???
发表于 2017-09-12 10:19:08 回复(2)
OC的block一共有三种 block ,globalblock 没有引用外部变量时是存在全局区啊
发表于 2018-04-04 16:14:46 回复(1)
C。定义块的时候,所占的内存区域是分配在栈中,块只在它定义的范围内有效。一旦离开相应范围,编译器就有可能会把这部分内存区域给覆写。使用copy后,会将block复制到堆上。
发表于 2017-05-31 17:49:02 回复(1)
不是block内部引用外部的局部变量时才会在栈内存上吗?
  • 不管在ARC还是MRC环境下,block内部如果没有访问外部变量,这个block是全局block__NSGlobalBlock__,形式类似函数,存储在内存中的代码区
  • MRC下,block内部如果访问外部变量,这个block是栈block__NSStackBlock__,存储在内存中的上。
  • MRC下,block内部访问外部变量,同时对该block做一次copy操作,这个block是堆block__NSMallocBlock__,存储在内存中的上。
  • ARC下,block内部如果访问外部变量,这个block是堆block__NSMallocBlock__,存储在内存中的上,因为在ARC下,默认对block做了一次copy操作
  • 发表于 2017-08-13 16:52:12 回复(0)
    1、Block未引用外部变量是在全局区。2、引用了外部变量,没有进行copy操作是在栈区。3、引用了外部变量,进行一次copy操作是在堆区。
    发表于 2019-07-15 15:22:48 回复(0)
    这什么答案啊!
    发表于 2022-02-18 11:54:50 回复(0)

    这明显应该选A啊

    block没有引用外部变量应该在全局区

    引用了的情况下才会到堆区或栈区吧

    发表于 2018-10-23 11:17:52 回复(0)
    答案应该是错的吧   这道题正确答案应该是数据区    最接近答案的也应该是全局区  怎么选都选不到栈区 
    发表于 2018-09-06 10:56:01 回复(0)
    这道题个人觉得有些问题!在ARC下,block也是有三种类型的。没有引用外部变量是全局的block,存放在全局区的。而栈区的block是那种匿名的引用了外部变量,堆区的block是可以通过block名调用并引用了外部变量的一类。
    编辑于 2017-09-24 17:15:01 回复(0)
    选择C才对
    发表于 2017-07-02 15:14:52 回复(0)