Pysolate Spine中文旁白 + HTML 图解全部小课 ↗

知识小点 · 解开一个疑问

PyObject *:一份引用,谁来归还?

沿 guest/runtime.c 的真实调用,看新引用、借用数据、Py_DECREF 与 malloc/free 为什么不能混账。

01 / 05

先把地址和所有权分开

PyObject * 不是自动的所有权说明

准备播放
CPYTHON C API / 引用责任先问:这次调用交给我什么?
取得引用
bootstrap新引用
本函数持有一份引用ImportModule 返回后,先由局部变量接住。
execute_fn / prefix_*新引用 × 3
分别缓存本函数持有的一份GetAttrString 返回的函数对象也要按约定管理。
借用访问尚未出现
不先猜它的归还方式地址本身不能告诉你该不该 Py_DECREF。
C buffer尚未出现
不属于 PyObject 引用账后面用 malloc/free 另讲。
guest/runtime.c · L82–86关键行

          
          PyObject *bootstrap = PyImport_ImportModule("spine_bootstrap");
        
          
          execute_fn = PyObject_GetAttrString(bootstrap, "execute");
        
          
          prefix_begin_fn = PyObject_GetAttrString(bootstrap, "prefix_begin");
        
          
          prefix_feed_fn = PyObject_GetAttrString(bootstrap, "prefix_feed");
        

先记“本函数持有的一份引用”,不要把地址当成计数器。

旁白

点一下播放即可。也可以只听声音,或拖动进度跳到想看的位置。

0:001:21

正在准备本课音轨与图解。首次播放需要点一下。

跳到某一节 / 查看讲稿