我的应用程序是完全无泄漏的(我认为),但有一件事据说会泄漏很多。所以这就是:
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的泄漏...但我该怎么办?
答案 0 :(得分:1)
你直接访问你的ivars,你不应该这样做。如果您用self.levelConfig =...
替换它,那么您的泄漏很可能会消失。
您在此处提供的特定代码块很可能是viewDidLoad
或其他可以多次调用的地方。每次执行此操作时,您都会泄露levelConfig
的旧内容。使用self.
将解决这个问题。除init
和dealloc
之外,请避免直接访问您的ivars。