0

クラスがあるとします。

@interface FooBar : NSObject

@property(readonly, getter = _getSpace) int** space;

@end

spaceプロパティは次のように実装されます。

@implementation FooBar

int m_space1[256];
int m_space2[256];
int* m_space[2] = { m_space1, m_space2};

-(int **) _getSpace {
    return m_space;
}

@end

次に、以下を使用してint[2][256]配列を変更することは合法ですか。

FooBar * f = [[FooBar alloc] init];
f.space[1][120] = 0;

4

1 に答える 1

3

はい。ポインターを返し、ポイントされている値を変更しています。これは完全に合法です。これを許可したくない場合は、適切な const 修飾子を型に追加する必要があります。

正当でないのは、構造体を返し、その構造体を直接変更することです。


KennyTM がコメントで述べたように、m_space{,1,2}変数は、おそらく意図したようにインスタンス変数ではなく、グローバル変数です。これを修正する最も簡単な方法は、次のように ivar ブロックを に配置することです@implementation

@implementation FooBar {
    int m_space1[256];
    int m_space2[256];
    int* m_space[2] = { m_space1, m_space2 };
}

-(int **) _getSpace {
    return m_space;
}
@end
于 2012-05-30T20:01:08.407 に答える