我目前正在开发Love2D游戏并使用名为middleclass的OOP库。不幸的是,middleclass默认情况下没有析构函数,即允许我销毁对象的东西。我将所有对象存储在一个表中,这样我就可以遍历它们并执行它们的Draw和Update函数。在我的代码中,我希望对象能够自行删除。我试过了
self = nil
但这不起作用!是否有可能找到表中的对象键而不循环查找它然后只使用table.remove?这仍然不是最理想的,好像将来有引用我也必须从这些表中删除它。 如何实现这一目标?
答案 0 :(得分:3)
您可以将对象保存在由对象本身索引的表中:cache[obj] = obj
。然后要从游戏中删除对象,你只需要做cache[self] = nil
并且(假设没有其他对该对象的引用)它将在一段时间后被垃圾收集。
如果您有其他地方引用该对象,您可以检查使用"weak" tables是否适合您的用例。