首页 > 其他 > 详细

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

时间:2015-09-05 22:23:54      阅读:445      评论:0      收藏:0      [点我收藏+]

一.如果只使用全局或静态变量或不使用外部变量, 那么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块外地址相同;

技术分享

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

原文:http://my.oschina.net/zhangjie9142/blog/501419

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!