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];

Instruments 向我展示了以下泄漏:

截图仪器

其中,当我双击时,总是显示同一行,即:

截图仪器 2

这显然是 levelconfig 的泄漏......但我该怎么办?

4

1 回答 1

1

您正在直接访问您的 ivars,您不应该这样做。如果您将其替换为self.levelConfig =...,那么您的泄漏很可能会消失。

您在此处提供的特定代码块很可能在某个地方viewDidLoad或其他可以多次调用的地方。每次你这样做,你都会泄露levelConfig. 使用self.将解决这个问题。避免直接访问您的 ivars,除了 ininitdealloc.

于 2012-06-08T01:45:50.023 回答