Как реализовать CHCircularBuffer в проекте iOS?

для моего игрового проекта 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];

Например. эта строка создаст ошибку.

Значит, с моим кодом что-то не так. Возможно, я не понимаю буфер и неправильно добавляю объекты. Я не знаю. Есть идеи или предложения?

7
задан Dave DeLong 23 June 2011 в 13:55
поделиться