Я пытаюсь создать массив изменяемого размера CGPoints в цели-c. Я имею, изучили использование NSMutableArray однако, это, кажется, не позволяет изменять размер. Есть ли что-то еще, что я могу использовать?
спасибо
Используйте NSMutableArray
, но просто поместите свои структуры CGPoint
в объекты NSValue
. Пример:
CGPoint myPoint = {0,0};
CGPoint anotherPoint = {42, 69};
NSMutableArray * array = [NSMutableArray array];
[array addObject:[NSValue valueWithCGPoint:myPoint]];
[array addObject:[NSValue valueWithCGPoint:anotherPoint]];
CGPoint retrievedPoint = [[array objectAtIndex:0] CGPointValue];
Обратите внимание, что методы + valueWithCGPoint:
и CGPointValue
доступны только на iPhone. Однако, если вам это нужно для Mac, существуют аналогичные методы для работы с NSPoint
s, и легко преобразовать CGPoint
в NSPoint
(вы можете приведите или используйте NSPointFromCGPoint ()
).
NSMutableArray предназначен для объектов. Для простых старых типов данных используйте NSMutableData и старые добрые типы указателей. Это неструктурированный буфер памяти с изменяемым размером, именно то, что вам нужно для вектора POD. Что касается безопасности статического типа, Objective C в любом случае не дает вам ничего из этого.
РЕДАКТИРОВАТЬ:
Создание изменяемого объекта данных с начальным размером n структур CGPoint:
NSMutableData *Data = [NSMutableData dataWithLength: n*sizeof(CGPoint)];
Размещение точки CGPoint в буфере в i-й позиции:
CGPoint pt;
NSRange r = {i*sizeof(CGPoint), sizeof(CGPoint)};
[Data replaceBytesInRange: r withBytes:&pt];
Получение CGPoint из i-й позиции into pt:
CGPoint pt;
NSRange r = {i*sizeof(CGPoint), sizeof(CGPoint)};
[Data getBytes: &pt range:r];
Увеличение массива на n объектов:
[Data increaseLengthBy:n*sizeof(CGPoint)];
Надеюсь, что это покроет его. См. Справочник NSMutableData и имейте в виду, что к нему применимы все методы NSData.