Block 在不同情况下的变量存储区域

可紊 提交于 2019-12-10 05:48:41

一.如果只使用全局或静态变量或不使用外部变量, 那么Block块的代码会存储在全局区;
二.如果使用了外部变量, 在ARC中, Block块的代码会存储在堆区;
                                    在MRC中, Block快的代码会存储在栈区;
三.block默认情况下不能修改外部变量, 只能读取外部变量:
                                 在ARC中, 外部变量存在堆中, 这个变量在Block块内与在Block块外地址相同;
                                                外部变量存在栈中, 这个变量会被copy到为Block代码块所分配的堆中;
                                 在MRC中, 外部变量存在堆中, 这个变量在Block块内与Block块外相同;
                                                 外部变量存在栈中, 这个变量会被copy到为Block代码块所分配的栈中;
四.如果需要修改外部变量, 需要在外部变量前面声明 __block
                                 在ARC中, 外部变量存在堆中, 这个变量在Block块内与Block块外地址相同;
                                                外部变量存在栈中, 这个变量会被转移到堆区, 不是复制, 是转移.
                                 在MRC中, 外部变量存在堆中, 这个变量在Block块内与Block块外地址相同;
                                               外部变量存在栈中, 这个变量在Block块内与Block块外地址相同;

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!