для моего игрового проекта 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 я получаю ошибку.
Теперь я пытаюсь получить доступ к буферу из класса ландшафта, в котором происходит рисование. Но всякий раз, когда я пытаюсь получить доступ к объектам, я получаю ошибку «bad_access».
NSArray *arr = [terrainManager.circularTerrainBuffer allObjects];
Например. эта строка создаст ошибку.
Значит, с моим кодом что-то не так. Возможно, я не понимаю буфер и неправильно добавляю объекты. Я не знаю. Есть идеи или предложения?