Upv*_*ote 7 objective-c circular-buffer chdatastructures
对于我的游戏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
Run Code Online (Sandbox Code Playgroud)
这是如何在TerrainManager的实现中初始化环形缓冲区
circularTerrainBuffer = [[CHCircularBuffer alloc] initWithCapacity:parts];
Run Code Online (Sandbox Code Playgroud)
这将创建缓冲区的实例,并将size属性设置为parts.现在我使用addObject方法将对象添加到缓冲区:
[circularTerrainBuffer addObject:[NSNumber numberWithDouble:0.2]];
Run Code Online (Sandbox Code Playgroud)
有时这行会收到错误"exec_bad_access".例如,当我初始化容量为15的缓冲区时,一切都很好,20我得到了错误.
我现在尝试从绘图发生的terrain类访问缓冲区.但每当我尝试访问对象时,我都会收到"bad_access"错误.
NSArray *arr = [terrainManager.circularTerrainBuffer allObjects];
Run Code Online (Sandbox Code Playgroud)
例如,这一行会产生错误.
所以我的代码有问题.也许我不理解缓冲区并以错误的方式添加对象.我不知道.任何想法或建议?
您显示的代码片段是正确的。我实现了一个小项目来测试CHCircularBuffer您指定的方式并且它工作正常。所以,问题一定出在其他地方。
恕我直言,解决这个问题的唯一方法是在失败的行上放置一个断点,然后单步进入该addObject函数以查看它到底在哪里失败。该数组可以在那里重新分配,因此可能会失败并提供错误的访问权限。对于 也一样allObjects。
不管怎样,我不得不说我可以毫无问题地执行我的测试,添加对象,从头部和尾部删除它们,并毫无问题地获取所有对象的数组。
如果您发布更多代码,我们也许可以提供更多帮助。
| 归档时间: |
|
| 查看次数: |
2024 次 |
| 最近记录: |