0

私は Objective-C の初心者であり、C++ のベクトル テンプレートのように、Objective-C の CGPoint にメモリを動的に割り当てたいと考えています。配列内の値を変更することができます。NSMtubeArray がこれを達成できることは知っていますが、CGPoint を NSValue にラップしてから NSValue を NSMtubeArray に格納するたびに面倒でしょうか? [NSMtibleArray 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 に答える