後分析我的cocos2d遊戲我有一個警告「上線525分配的對象的潛在泄漏並存入‘的valueString’」在此代碼對象的潛在泄漏分配
525 NSString * valueString=[[[NSString alloc] initWithString:[NSString stringWithFormat:@"%@: %@",kGameTimeeng,[allFunctions getTimeFormat:(int) _timeLimit]]] retain];
if([_language isEqualToString:@"rus"]){
[valueString release];
valueString=[[[NSString alloc] initWithString:[NSString stringWithFormat:@"%@: %@",kGameTimerus,[allFunctions getTimeFormat:(int) _timeLimit]]] retain];
}
id sequence=[CCSequence actions:
[CCCallFuncND actionWithTarget: allFunctions selector: @selector(setLabelColor:withIndex:) data:(void*)color],
[CCCallFuncND actionWithTarget: allFunctions selector: @selector(setLabelValue:withValue:) data:(NSString*)valueString],
// [CCCallFuncND actionWithTarget: self selector: @selector(setLabelStroke:withTag:) data:(void*)TagCurentPointsLabelStroke],
[CCBlink actionWithDuration:0.5f blinks:2],
[CCShow action],
[CCCallFuncND actionWithTarget: allFunctions selector: @selector(setLabelColor:withIndex:) data:(void*)colorAfter],
nil];
[_timeLimitLabel runAction:sequence];
[valueString release];
allFunctions .m
-(void) setLabelValue:(id) sender withValue:(NSString*) value
{
CCLabelTTF *label=(CCLabelTTF *)sender;
NSString * valueString=[[[NSString alloc] initWithString:[NSString stringWithFormat:@"%@",value]] autorelease];
[label setString:[NSString stringWithFormat:@"%@",valueString]];
//[valueString release];
}
你能解釋一下爲什麼嗎?
在allFunctions.m中,您應該重新排列字符串。但是,在這些情況下,我會放棄字符串。使用autorelease而不是release,不要釋放它。此外(但shoudl與警告不相關)我會將535行移入if ... rus語句的else分支。 – 2012-07-24 09:31:23
對不起,在allFunctions.m你已經自動發佈它。我忽略了這一點。這沒關係。 – 2012-07-24 09:37:39