4

NSMapTable私は最近、従来のコレクションのように機能するやのようなこれらのクラスを発見しましNSPointerArrayたが、弱い参照や単純な古い C ポインターも格納できます。残念ながら、for...in構文を使用して非NSObjectポインターを反復処理することはできないようです。例えば:

typedef struct Segment {
    CGPoint bottom, top;
} Segment;
...
NSPointerArray *segments = [[NSPointerArray alloc] 
                                 initWithOptions:NSPointerFunctionsOpaqueMemory];
...
Segment *s = malloc(sizeof(Segment));
[segments addPointer: s];
...
for (Segment *s in segments) {   // nope...

コンパイラは最後の行が好きではありません。エラー:

セレクター要素タイプ 'Segment *' (別名 'struct Segment *') は有効なオブジェクトではありません

それで、私はこれをする必要がありますか?

for (int i=0, len=segments.count; i<len; i++) {
    Segment *seg = [segments pointerAtIndex:i];
    ...

それは世界の終わりではありませんが、確認したいだけです。

4

2 に答える 2

1

この場合、for (... in ...) 構文は機能しません。これは、Segment が Objective C オブジェクトではなく構造体であるためです。2 番目の for ループが機能するはずです。

于 2014-03-24T00:25:21.670 に答える