Создайте массив изменяемого размера CGPoints в цели-c

Я пытаюсь создать массив изменяемого размера CGPoints в цели-c. Я имею, изучили использование NSMutableArray однако, это, кажется, не позволяет изменять размер. Есть ли что-то еще, что я могу использовать?

спасибо

5
задан 10 March 2010 в 20:28
поделиться

2 ответа

Используйте 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 () ).

21
ответ дан 18 December 2019 в 06:49
поделиться

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.

2
ответ дан 18 December 2019 в 06:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: