2

C配列のようなものを使用する必要があります:

MyStruct theArray[18][18];

しかし、私はそれをプロパティとして定義することはできません:

@property (nonatomic) MyStruct theArray[18][18];

それから私はしなければなりません:

@implementation MyClass
{
    MyStruct theArray[18][18];
}

しかし、これは現代のObjective Cガイドラインの観点からは良いのでしょうか?

ありがとう

アップデート:

構造体をクラスとして定義し、NSMutableArrayを使用して処理できることはわかっていますが、私の場合はC配列を使用する方が便利です。主な懸念事項は、theArray [を割り当てたり解放したりしないため、コーディングガイドラインとメモリの問題です。 18] [18]、そのライフサイクルが何であるかわからない、そして私はARCを使用している。

4

3 に答える 3

2

プロパティを配列型にすることはできませんが、パブリックインスタンス変数は十分なカプセル化を提供しません。よりObjectiveCのようなアプローチは、プライベート2D配列と、それにアクセスするためのポインターを返すメソッドのペアまたはメソッドを定義することです。

// For small structs you can use a pair of methods:
-(MyStruct)getElementAtIndexes:(NSUInteger)i and:(NSUInteger)j;
-(void)setElementAtIndexes:(NSUInteger)i and:(NSUInteger)j to:(MyStruct)val;

// For larger structs you should use a single method that returns a pointer
// to avoid copying too much data:
-(MyStruct*)elementAtIndexes:(NSUInteger)i and:(NSUInteger)j;
于 2013-02-02T11:16:38.577 に答える
1

代わりにポインタを使用するのはどうですか?

@property (nonatomic) MyStruct **theArray;
于 2013-02-02T11:02:40.243 に答える
0

これまでの答えは素晴らしいです。。。さらに2つのオプションがあります。

1.少しハッキー

(これにObjective-C ++が必要かどうかはわかりません)

次のように、配列をパブリックプロパティとして作成できます。

@interface MyClass
{
    @public:
    MyStruct theArray[18][18];
}
@end

そして、次のようにアクセスします。

myClass->theArray

2.構造体を返す

Cスタイルの配列を返すことはできませんが、構造体を返すことはできます。

typedef struct
{
     CGPoint textureCoordinates[kMaxHillVertices];
     CGPoint borderVertices[kMaxBorderVertices];
} HillsDrawData;


@interface Hills : NSObject
{
    HillsDrawData _drawData;
}


- (HillsDrawData)drawData; //This will get cleaned up when the class that owns it does.

@end
于 2013-02-02T12:01:48.503 に答える