для моего игрового проекта iOS мне нужен кольцевой буфер. Он должен работать аналогично очереди, в которой элементы выходят и входят, но общее количество элементов в буфере должно оставаться неизменным.
Я успешно реализовал кольцевой буфер, используя java, но я не настолько знаком с целью-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];
Это создает экземпляр буфера и устанавливает свойство размера в части. Теперь я добавляю объекты в буфер, используя метод addObject:
[circularTerrainBuffer addObject:[NSNumber numberWithDouble:0.2]];
Иногда эта строка получает ошибку "exec_bad_access". Например. когда я инициализирую буфер емкостью 15, все в порядке, с 20 я получаю ошибку.
Теперь я пытаюсь получить доступ к буферу из класса terrain, где происходит рисование. Но всякий раз, когда я пытаюсь получить доступ к объектам, я получаю ошибку «bad_access».
NSArray *arr = [terrainManager.circularTerrainBuffer allObjects];
например. эта строка создаст ошибку.
Так что с моим кодом что-то не так. Может быть, я не понимаю буфер и неправильно добавляю объекты. Я не знаю. Есть идеи или предложения?