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];
Прибор показывает мне следующие утечки:
Который, когда я дважды щелкаю, всегда показывает одну и ту же строку, а именно:
что, очевидно, утечка levelconfig... но что я могу сделать?
1 ответ
Вы напрямую получаете доступ к своим иварам, чего не следует делать. Если вы заменили это на self.levelConfig =...
тогда очень вероятно, что ваши утечки исчезнут.
Скорее всего, конкретный блок кода, который вы предоставили здесь, где-то вроде viewDidLoad
или другое место, которое можно назвать несколько раз. Каждый раз, когда вы делаете это, вы теряете старое содержимое levelConfig
, С помощью self.
это исправлю. Избегайте прямого доступа к вашим иврам, кроме как в init
а также dealloc
,