0

私がこのプロパティを持っているとしましょう:

@property (nonatomic, readwrite) void*** array;

そして、objective-c オブジェクトで配列を初期化します。

- (id) init
{
    if(self=[super init])
    {
        array= malloc(10*sizeof(void**));
        for(NSUInteger i=0; i<10; i++)
        {
            array[i]= malloc(10*sizeof(void*));
            for(NSUInteger j=0; j<10; j++)
            {
                array[i][j]= (__bridge_retained void*) @"Hello";
            }
        }
    }
    return self;
}

次に、オブジェクトが実際には保持されていないことがわかりました。

 Custom* c=[Custom new];
 NSLog(@"%@",(__bridge NSString*)c.array[40][40]);

これは (null) を出力します。ブリッジ保持キャストが強制的にオブジェクトを保持していると思いましたが、これを回避するにはどうすればよいですか?

4

2 に答える 2

0

nil(またはランダムガベージ)が発生する理由は、配列に10個の要素を割り当ててデータを設定してから、40番目の要素にアクセスしようとしたためです。

于 2012-12-06T13:09:14.663 に答える
0

「void」タイプの代わりに「id」タイプを使用してみることができます。

「id」も抽象的です。

于 2012-12-06T03:10:35.533 に答える