关于 object-C block

2019-03-17 16:59:42 +08:00
 kingliangyingjun
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 一下就指向堆了。脑子转不开了
1367 次点击
所在节点    程序员
2 条回复
egoyau
2019-03-17 17:04:38 +08:00
iOS 转前段快两年了,这个问题,看不懂
haozhang
2019-03-17 17:30:59 +08:00
我觉得 copy 大概等于:malloc 加 memcpy 吧,先在 heap 上面 malloc 申请内存,再 copy 上去,不就完成了 stack 到 heap 的移动了嘛

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/545517

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX