Самый эффективный способ изменить значение CGPoint в массиве CGPoint?
Я построил массив CG Point следующим образом:
NSMutableArray *_startPositions = [NSMutableArray array];
[_startPositions addObject:[NSValue valueWithCGPoint:CGPointMake(0.0, 0.0)]];
[_startPositions addObject:[NSValue valueWithCGPoint:CGPointMake(0.0, 0.0)]];
Как я могу наиболее эффективно изменить значения x и y точек в массиве?
Если я получу значение с помощью:
CGPoint myPoint0 = [[_startPositions objectAtIndex:0] CGPointValue];
Я возвращаю копию пункта. Как я могу изменить значения x и y CGPoints в массиве? Я мог бы удалить CGPoint в любой позиции и заменить его на правильные значения x,y, но есть ли более эффективный способ?
3 ответа
Используйте массив C вместо NSMutableArray. При необходимости используйте классы коллекций C++ STL, такие как std::vector или другую библиотеку коллекций C/C++. Таким образом, вы можете манипулировать содержимым массива без вызова метода Obj-C.
Из документов:
NSValue
объекты всегда неизменны.
Таким образом, ваш единственный вариант здесь, чтобы создать новый NSValue
заменить старый, когда CGPoint
значение меняется. Если вы ищете более эффективный способ хранения массива CGPoints
тогда массив C является самым простым и быстрым способом.
Если вы меняете только значение "x" или "y" CGPoint point
, ты можешь это сделать:
((CGPoint *)&point)->x += dx;
или
((CGPoint *)&point)->y += dy;
Я предлагаю вам создать свой собственный класс как
.час
@interface MyPoint : NSObject {
CGPoint point;
}
@property (nonatomic,assign) CGPoint point;
@end
.m
@implementation MyPoint
@synthesize point;
@end
Затем добавьте свой MyPoint
Объект в вашем массиве.
Измени это как
MyPoint *myPoint = [_startPositions objectAtIndex:0];
myPoint.point = myPoint0;