对于我的游戏 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 则出现错误。
我现在尝试从进行绘图的地形类访问缓冲区。但每当我尝试访问对象时,我都会收到“bad_access”错误。
NSArray *arr = [terrainManager.circularTerrainBuffer allObjects];
例如,这一行会产生错误。
所以我的代码有问题。也许我不理解缓冲区并以错误的方式添加对象。我不知道。有什么想法或建议吗?