我遇到了一个字符串创建和比较的问题,似乎丢失了它的内容。目前,我有以下内容:
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。不知何故,正在创建的字符串在一些迭代后只是胡言乱语,并试图将其与传入的最后一个字符串进行比较,导致代码崩溃而不会抛出任何错误。
帮助:(
发布于 2010-10-13 23:58:50
您可能希望尝试分配字符串,因为这可能是自动释放问题。
NSString *myString = [[NSString alloc] initWithFormat:@"%@credits_face%d.png",_director.platformPrefix, creditPos+1];
[creditCart.faceImage setImage:myString];然后让setImage方法释放字符串。
发布于 2010-10-13 23:57:17
听起来像是其中一根弦被重新分配了。可能是过度释放,或者没有对内存警告或viewDidUnload做出正确的反应。
出于调试目的,尝试保留_director.platformPrefix并打印出该对象的retainCount。如果问题消失了,那么您确实遇到了retainCount问题。在几乎99%的情况下,最终的解决方案不仅仅是保留它,而是找到错误地释放它的代码。
发布于 2010-10-13 23:58:35
您如何将inImageName分配给imageName。如果你没有使用属性,也没有保留,那么你的inImageName字符串就会被垃圾回收。stringWithFormat方法将返回一个自动释放的字符串,该字符串将被自动清除,除非您保留它。
或者在你的头中创建:
@property (nonatomic, retain) NSString *imageName;在你的实现中:
@synthesize imageName;或者,当您将其分配给imageName时,在其中的某个位置添加一个inImageName retain;。(只需确保在赋值之前和在dealloc方法中释放imageName字符串。)
https://stackoverflow.com/questions/3925552
复制相似问题