0

私のアプリケーションは完全にリークがありません (私はそう思います)。だからここにあります:

    mainPath = [[NSBundle mainBundle] bundlePath];
    levelConfigPlistLocation = [mainPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist",CATEGORY]];
    levelConfig = [[NSDictionary alloc] initWithContentsOfFile:levelConfigPlistLocation];

そして、これが私がそれを使用する方法です:

NSString *question = [[[levelConfig objectForKey:LEVELSETSTRING]objectForKey:LEVELSTRING]objectForKey:@"question"];

    questionLabel = [CCLabelTTF labelWithString:question dimensions:CGSizeMake(820.0f,360.0f) alignment:UITextAlignmentCenter fontName:@"helvetica" fontSize:32.0f];
    questionLabel.position = ccp(screenSize.width/2-30 ,screenSize.height);
    questionLabel.color = ccc3(255,255,255);
    [self addChild:questionLabel z:5];

と:

NSString *answer = [[[levelConfig objectForKey:LEVELSETSTRING]objectForKey:LEVELSTRING]objectForKey:@"answer"];

    for (int i=0; i < [answer length]; i++) 
    { 
        NSRange r = NSMakeRange(i, 1);
        NSString *ichar = [answer substringWithRange:r]; 
        [characters addObject:ichar]; 
    }

そして、-dealloc私はそれをリリースします:

[levelConfig release];

楽器は私に次のリークを示しています:

スクリーンショット

ダブルクリックすると、常に同じ行が表示されます。

スクリーンショット 楽器 2

これは明らかに levelconfig の漏れです...しかし、どうすればよいですか?

4

1 に答える 1

1

ivar に直接アクセスしているため、これを行うべきではありません。これを に置き換えるとself.levelConfig =...、リークがなくなる可能性が非常に高くなります。

ここで提供したコードの特定のブロックは、viewDidLoad複数回呼び出すことができるような場所または他の場所にある可能性があります。それを行うたびに、 の古い内容がリークされますlevelConfig。を使用self.すると、それが修正されます。initと以外で ivar に直接アクセスすることは避けてくださいdealloc

于 2012-06-08T01:45:50.023 に答える