libspotify中曲目的生命周期

时间:2013-01-21 14:11:20

标签: interop spotify libspotify

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

当我获得轨道句柄时,该轨道句柄何时变为无效?我可以假设在会话中,轨道句柄的给定值总是指向同一轨道吗?我需要手动增加和减少曲目的引用次数吗?

由于 汤姆

1 个答案:

答案 0 :(得分:4)

根据the docs

  

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

     

另一方面,其他访问器函数(包括sp_link_as_artist等)返回从其检索对象借用的引用。从sp_link中检索sp_album会使相册对象存活,直到链接对象被释放,除非其引用计数显式递增。

因此,如果您通过调用sp_playlist_track来获取跟踪句柄 - 它不包含字符串create - 则跟踪引用由播放列表拥有。只有在您确定播放列表句柄有效且确定播放列表仍包含曲目时,您才可以确定它仍然有效,除非您手动增加其引用次数。

同样,从播放列表容器中获取的播放列表只能与容器一样长,并且可能不会长时间存在。

实际上,我认为你应该在从回调返回之前添加对轨道的引用,或者再次调用sp_session_process_events。可以依赖父对象在该点之前保持活着,但在此之后它更难以推理,所以只需添加一个引用,然后在完成时释放它。