1

今日、完全にブレインファーティングをしているのか、それとも何なのかわかりません。しかし、基本的には、使用するNSMutableDictionaryを初期化しようとしています。私はそれをプロパティとして持っています:

@property (nonatomic, retain) NSMutableDictionary *baseViewDictionary;

.mファイル内:

@synthesize baseViewDictionary;



// in the init method:
    NSMutableDictionary *tempDict = [[NSMutableDictionary alloc] initWithCapacity:0];
    self.baseViewDictionary = tempDict;
    [self.baseViewDictionary setObject:@"test" forKey:[NSNumber numberWithInteger:0]];
    [tempDict release];

これは、NSMutableDictionaryを初期化するために使用されるパターンだと思いました。残念ながら、私のself.baseViewDictionaryは設定されません。私のtempDictには、デバッガーに表示される1つのキーと値のペアがありますが、self.baseViewDictionaryには0x0000000があります。だからそれは

self.baseViewDictionary = tempDict;

実行されることはありません。そのコード行に足を踏み入れると、@ synthesize baseViewDictoinaryにジャンプして、その行に戻りますself.baseViewDictionary=tempDict

setObject@"test"これは、実行後のデバッガーの図です。

ここに画像の説明を入力してください

4

1 に答える 1

0

あなたのパターンは正しいです。
初期化は正しく行われ、プロパティへの割り当て後にディクショナリを解放してもメモリリークは発生しません。これにより、ディクショナリが保持されます。

あなたのinit方法は正しいですか?つまり、 (ではなく)
呼び出し、この後にあなたのことをして、戻ってきますか?self = [ super init ]==self

当たり前のように見えるかもしれませんがnil、インスタンス変数がそうであるように見えるので、 ...selfnil

- ( id )init
{
    if( ( self = [ super init ] ) )
    {
        NSMutableDictionary * tempDict = [ [ NSMutableDictionary alloc ] initWithCapacity: 0 ];
        self.baseViewDictionary        = tempDict;

        [ self.baseViewDictionary setObject: @"test" forKey: [ NSNumber numberWithInteger: 0 ] ];
        [ tempDict release ];

        NSLog( @"%@", self.baseViewDictionary );
    }

    return self;
}
于 2012-05-23T22:56:15.520 に答える