F450

ブログ > エントリ > NSMutableArrayに色んなものを入れてみる。

2006/03/30(木) 23:59:59 (JST)

NSMutableArrayに色んなものを入れてみる。

NSMutableArrayというと、Objective-Cのオブジェクトを順番に保持しておくクラスですが、実際に保持しているのはポインタなわけです。
ということは、オブジェクトぢゃないポインタも持たせることができるのではないかと思いやってみたわけです。
結論から言うと、できました。
NSMutableArrayに登録するとretainメッセージとか送信されたりして変なこと起きるんぢゃないかと思っていたのも杞憂だったようで。
実際に試してみたコードは以下の通り:
test.m
#import <Cocoa/Cocoa.h>

int main() {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    NSMutableArray *mutableArray = [NSMutableArray array];
    int cArray[5][3] =
        {
            { 0,  1,  2},
            { 3,  4,  5},
            { 6,  7,  8},
            { 9, 10, 11},
            {12, 13, 14}
        };
    int ii;

    for (ii = 0;ii < 5;ii++) {
        [mutableArray addObject:(id)cArray[ii]];
    }

    for (ii = 0;ii < 5;ii++) {
        int *cArrayInLoop = (int *)[mutableArray objectAtIndex:ii];
        printf("%d, %d, %d\n", cArrayInLoop[0], cArrayInLoop[1], cArrayInLoop[2]);
    }

    [pool release];

    return 0;
}
コンパイルはターミナルからgcc test.m -o test -framework Cocoaでいけます。
なんでもいけるなー、NSMutableArray。
retainメッセージとかどうなってんのかなー。
そこら辺が気になる人は念のために、
NSMutableArray *mutableArray =
    [(NSMutableArray *)CFArrayCreateMutable(kCFAllocatorDefault, 0, NULL) autorelease];
としてNSMutableArrayをCoreFoundationからコールバックをNULLにして作成すると完璧かもしれません。

このエントリへのコメント

このエントリにコメントはありません。
※コメントの新規投稿は現在のところ未実装です。