首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >丢了我的线

丢了我的线
EN

Stack Overflow用户
提问于 2010-10-13 23:52:16
回答 4查看 280关注 0票数 0

我遇到了一个字符串创建和比较的问题,似乎丢失了它的内容。目前,我有以下内容:

代码语言:javascript
复制
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的函数中我有...

代码语言:javascript
复制
- (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。不知何故,正在创建的字符串在一些迭代后只是胡言乱语,并试图将其与传入的最后一个字符串进行比较,导致代码崩溃而不会抛出任何错误。

帮助:(

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-10-13 23:58:50

您可能希望尝试分配字符串,因为这可能是自动释放问题。

代码语言:javascript
复制
NSString *myString = [[NSString alloc] initWithFormat:@"%@credits_face%d.png",_director.platformPrefix, creditPos+1];
[creditCart.faceImage setImage:myString];

然后让setImage方法释放字符串。

票数 -1
EN

Stack Overflow用户

发布于 2010-10-13 23:57:17

听起来像是其中一根弦被重新分配了。可能是过度释放,或者没有对内存警告或viewDidUnload做出正确的反应。

出于调试目的,尝试保留_director.platformPrefix并打印出该对象的retainCount。如果问题消失了,那么您确实遇到了retainCount问题。在几乎99%的情况下,最终的解决方案不仅仅是保留它,而是找到错误地释放它的代码。

票数 0
EN

Stack Overflow用户

发布于 2010-10-13 23:58:35

您如何将inImageName分配给imageName。如果你没有使用属性,也没有保留,那么你的inImageName字符串就会被垃圾回收。stringWithFormat方法将返回一个自动释放的字符串,该字符串将被自动清除,除非您保留它。

或者在你的头中创建:

代码语言:javascript
复制
@property (nonatomic, retain) NSString *imageName;

在你的实现中:

代码语言:javascript
复制
@synthesize imageName;

或者,当您将其分配给imageName时,在其中的某个位置添加一个inImageName retain;。(只需确保在赋值之前和在dealloc方法中释放imageName字符串。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3925552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档