0

我是 Objective-C 的新手,我想为 Objective-C 中的 CGPoint 动态分配内存,就像 C++ 中的向量模板一样。并能够更改数组中的值。我知道 NSMtubleArray 可以做到这一点,但是每次将 CGPoint 包装到 NSValue 中,然后将 NSValue 存储到 NSMtubleArray 中会不会太繁琐?我使用 [NSMtubleArray replaceObjectWith:[NSValue vauleWithCGPoint:]] 遇到运行时错误。

任何建议将不胜感激!

4

1 回答 1

3

如果您发现将 CGPoint 装箱和拆箱到 NSValue 中很繁琐,并且您需要随时直接访问 CGPoint 字段(否则这是不值得的,因为与NSValue的方法相比您没有获得任何valueWithCGPoint:东西CGPointValue),您可以创建一个代表一个点的类使用一些方法可以轻松地与 CGPoint 相互转换。

像这样的东西:

@interface MyPoint : NSObject

@property (nonatomic) CGFloat x;

@property (nonatomic) CGFloat y;

- (id)initWithCGPoint:(CGPoint)point;

+ (instancetype) pointWithCGPoint:(CGPoint)point;

- (CGPoint) CGPoint;

@end

和实施:

@implementation MyPoint

- (id)initWithCGPoint:(CGPoint)point
{
    self = [super init];
    if (self)
    {
        _x = point.x;
        _y = point.y;
    }
    return self;
}

+ (instancetype) pointWithCGPoint:(CGPoint)point
{
    return [[self alloc] initWithCGPoint:point];
}

- (CGPoint) CGPoint
{
    return CGPointMake(_x, _y);
}

@end
于 2013-06-09T23:48:30.667 回答