2

使用 libspotify 时,我通过浏览播放列表并获取有关曲目的信息来响应有关播放列表更改的回调。

当我获得轨道句柄时,该轨道句柄何时失效?我可以假设在会话中,轨道句柄的给定值将始终引用相同的轨道吗?我是否需要手动增加和减少曲目的引用数才能确定?

谢谢汤姆

4

1 回答 1

4

根据文档

引用计数用于 libspotify 中的所有域对象。包括字符串 create 的函数将返回一个具有预先增加的引用计数的对象。因此,当不再需要该值时,每个创建都必须有相应的释放。

另一方面,其他访问器函数(包括 sp_link_as_artist 等)返回从从中检索它的对象借用的引用。从 sp_link 中检索 sp_album 将使专辑对象在链接对象被释放之前一直存在,除非它的引用计数显式增加。

因此,如果您通过调用sp_playlist_track(不包含字符串create)获得曲目句柄,则曲目引用归播放列表所有。只有当您确定播放列表句柄有效并且您确定播放列表仍包含该曲目时,您才能确定它仍然有效,除非您手动增加其引用计数。

类似地,从播放列表容器中获得的播放列表只能与容器一样长,并且可能不会长。

实际上,我认为您应该在从回调返回或再次调用 sp_session_process_events 之前添加对轨道的引用。在此之前依靠父对象保持活动状态很好,但在那之后就很难推理了,所以只需添加一个引用,然后在完成后释放它。

于 2013-01-21T14:30:25.097 回答