initWithContentsOfFile протекает как сумасшедший

Мое приложение абсолютно без утечек (я думаю), но есть одна вещь, которая предположительно сильно просачивается. Итак, вот оно:

    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... но что я могу сделать?

1 ответ

Вы напрямую получаете доступ к своим иварам, чего не следует делать. Если вы заменили это на self.levelConfig =...тогда очень вероятно, что ваши утечки исчезнут.

Скорее всего, конкретный блок кода, который вы предоставили здесь, где-то вроде viewDidLoad или другое место, которое можно назвать несколько раз. Каждый раз, когда вы делаете это, вы теряете старое содержимое levelConfig, С помощью self. это исправлю. Избегайте прямого доступа к вашим иврам, кроме как в init а также dealloc,

Другие вопросы по тегам