我遇到了字符串创建和比较的问题,似乎丢失了它的内容。目前我有这个:
switch (creditPos)
{
case 0:
[creditCart.faceImage setImage:[NSString stringWithFormat:@"%@credits_face1.png", _director.platformPrefix]];
break;
case 1:
[creditCart.faceImage setImage:[NSString stringWithFormat:@"%@credits_face2.png", _director.platformPrefix]];
break;
case 2:
[creditCart.faceImage setImage:[NSString stringWithFormat:@"%@credits_face3.png", _director.platformPrefix]];
break;
case 3:
[creditCart.faceImage setImage:[NSString stringWithFormat:@"%@credits_face4.png", _director.platformPrefix]];
break;
case 4:
[creditCart.faceImage setImage:[NSString stringWithFormat:@"%@credits_face5.png", _director.platformPrefix]];
break;
default:
break;
}
faceImage是我创建的一个对象,在setImage的函数里面我有...
- (void)setImage:(NSString *)inImageName {
NSLog(@"Before Break");
// By default set the scale to 1.0f and the filtering to GL_NEAREST
if(![imageName isEqualToString:inImageName])
{
NSLog(@"Hit");}
我遇到的问题是,当我使用NSString stringWithFormat传入字符串时,它可能会工作5-8次,然后以某种方式进行窃听并将一些完全随机的内容发送到-36.657等函数。
这怎么可能?参数中没有任何内容正在改变,因为_director.platformPrefix是在程序开头设置的,并且从未改变过。唯一改变的是creditPos,用string来创建+传递给函数。不知何故,在一些迭代之后创建的字符串只是乱码,并试图将它与传递的最后一个字符串进行比较,而不会丢失任何错误。
帮助:(
答案 0 :(得分:0)
听起来其中一个字符串被释放。可能是过度释放或未正确响应内存警告或viewDidUnload。
出于调试目的,请尝试保留_director.platformPrefix
并打印出该对象的retainCount。如果问题消失了,你确实是一个retainCount问题。在近99%的案例中,最终的解决方案不仅仅是保留它,而是找到错误地释放它的代码。
答案 1 :(得分:0)
如何将inImageName分配给imageName。如果您没有使用属性而您没有保留,那么您的inImageName字符串将被垃圾收集。 stringWithFormat方法将返回一个自动释放的字符串,除非你保留它,否则它将被自动清除。
在标题中创建:
@property (nonatomic, retain) NSString *imageName;
并在您的实施中:
@synthesize imageName;
或者,添加[inImageName retain];在某处,当你将它分配给imageName。 (只需确保在分配之前和dealloc方法中释放imageName字符串。)
答案 2 :(得分:0)
我同意奥特温;听起来像platformPrefix没有被正确保留,并且它在被覆盖之前设法保持原样。
答案 3 :(得分:-1)
你可能想尝试分配字符串,因为这可能是一个自动释放问题。
NSString *myString = [[NSString alloc] initWithFormat:@"%@credits_face%d.png",_director.platformPrefix, creditPos+1];
[creditCart.faceImage setImage:myString];
然后让setImage方法释放字符串。