如何在iOS项目中实现CHCircularBuffer?

对于我的游戏iOS项目,我需要一个环形缓冲区。 它应该类似于元素出去并进入的队列,但缓冲区中元素的总量应该保持不变。

我使用java成功实现了环形缓冲区,但我不像Objective-C那么熟悉。 我在网上找到了一个名为CHCircularBuffer的环形缓冲区实现:https://bitbucket.org/devartum/chdatastructures/src/4d6d7194ee94/source/CHCircularBuffer.m但是我没有正确实现它。

循环缓冲区是一个名为TerrainManager的类的属性,它执行所有数学地形生成。

@interface TerrainManager : NSObject{

    int terrainParts;

    CHCircularBuffer* circularTerrainBuffer;
}

@property(nonatomic, retain) CHCircularBuffer *circularTerrainBuffer;
@end

这是如何在TerrainManager的实现中初始化环形缓冲区的

circularTerrainBuffer = [[CHCircularBuffer alloc] initWithCapacity:parts];

这将创建一个缓冲区实例并将size属性设置为部分。 现在我使用addObject方法将对象添加到缓冲区中:

[circularTerrainBuffer addObject:[NSNumber numberWithDouble:0.2]];

有时候这行会收到一个错误“exec_bad_access”。 例如,当我初始化容量为15的缓冲区时,一切都很好,20我得到错误。

我现在尝试从绘图发生的terrain类访问缓冲区。 但每当我尝试访问这些对象时,我都会得到一个“bad_access”错误。

NSArray *arr = [terrainManager.circularTerrainBuffer allObjects];

例如这条线会产生错误。

所以我的代码有问题。 也许我不明白缓冲区并以错误的方式添加对象。 我不知道。 任何想法或建议?


您所展示的代码片段是正确的。 我实现了一个小的项目来测试CHCircularBuffer的方式,你指定的方式,它可以正常工作。 所以,问题一定在其他地方。

解决这个问题的唯一方法是,恕我直言,在失败的线上放置一个断点,然后进入addObject函数查看失败的位置。 该阵列可以在那里重新分配,所以可能是这个失败并给予不好的访问权限。 allObjects

无论如何,我不得不说,我可以在没有任何问题的情况下执行我的测试,添加对象,从头部和尾部删除它们,并获得没有问题的所有对象的数组。

如果你发布更多的代码,我们可以帮助更多。

链接地址: http://www.djcxy.com/p/7987.html

上一篇: How to implement CHCircularBuffer in iOS project?

下一篇: How to share code between content script and addon?