У меня есть около 50 объектов CGPoint, которые описывают что-то вроде "пути", и я хочу добавить их в NSArray. Это будет метод, который просто вернет соответствующий CGPoint для данного индекса. Я не хочу создавать 50 переменных, таких как p1 =...; p2 =... и т.д. Есть ли простой способ, который позволил бы мне определить эти точки "мгновенно" при инициализации NSArray объектами?
Как я могу добавить объекты CGPoint в NSArray простым способом?
Ответ 1
С UIKit
Apple добавила поддержку CGPoint в NSValue
, поэтому вы можете сделать:
NSArray *points = [NSArray arrayWithObjects:
[NSValue valueWithCGPoint:CGPointMake(5.5, 6.6)],
[NSValue valueWithCGPoint:CGPointMake(7.7, 8.8)],
nil];
Перечислите столько экземпляров [NSValue], что у вас есть CGPoint, и закончите список в nil. Все объекты в этой структуре автоматически освобождаются.
С обратной стороны, когда вы вытаскиваете значения из массива:
NSValue *val = [points objectAtIndex:0];
CGPoint p = [val CGPointValue];
Ответ 2
Я использую это:
Создать массив:
NSArray *myArray = @[[NSValue valueWithCGPoint:CGPointMake(30.0, 150.0)],[NSValue valueWithCGPoint:CGPointMake(41.67, 145.19)]];
Получить 1-й объект CGPoint:
CGPoint myPoint = [myArray[0] CGPointValue];
Ответ 3
Вы также можете написать это в минимальной форме:
CGPoint myArray[] = { CGPointMake(5.5, 6.6), CGPointMake(7.7, 8.8) };
CGPoint p2 = myArray[1];
Ответ 4
Вы посмотрели CFMutableArray
? Это может работать лучше для вас.