这是一个创建于 1873 天前的主题,其中的信息可能已经有所发展或是发生改变。
block_byref 的数据访问。总是通过 block_byref->forward->val 来取得。
copy 之前,栈上 block_byref 的 __forwarding 指向自身,而栈上的 block 使用 block_byref->__forwarding->val 就可以修改栈上的数据。copy 之后,栈上的 block_byref 被复制到堆上,而栈上的 block_byref 的 __forwarding 被修改成指向堆上的数据,而堆上 block_byref 的 __forwarding 指向自身。
问题: “栈上的 block_byref 的 __forwarding 被修改成指向堆上的数据” 这一步 是怎么做到的,怎么就 copy 一下就指向堆了。脑子转不开了
2 条回复 • 2019-03-17 17:30:59 +08:00
|
|
1
egoyau 2019-03-17 17:04:38 +08:00
iOS 转前段快两年了,这个问题,看不懂
|
|
|
2
haozhang 2019-03-17 17:30:59 +08:00 via Android
我觉得 copy 大概等于:malloc 加 memcpy 吧,先在 heap 上面 malloc 申请内存,再 copy 上去,不就完成了 stack 到 heap 的移动了嘛
|