V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kingliangyingjun
V2EX  ›  程序员

关于 object-C block

  •  
  •   kingliangyingjun · 2019-03-17 16:59:42 +08:00 · 1358 次点击
    这是一个创建于 1860 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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
    egoyau
        1
    egoyau  
       2019-03-17 17:04:38 +08:00
    iOS 转前段快两年了,这个问题,看不懂
    haozhang
        2
    haozhang  
       2019-03-17 17:30:59 +08:00 via Android
    我觉得 copy 大概等于:malloc 加 memcpy 吧,先在 heap 上面 malloc 申请内存,再 copy 上去,不就完成了 stack 到 heap 的移动了嘛
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2839 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:32 · PVG 10:32 · LAX 19:32 · JFK 22:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.