我目前正在为iPhone开发第一个应用程序,已经完成,但是内存管理等存在问题。请记住,我对Java相当满意,并且我只学习了大约4天的ObjectiveC。

因此,确切的问题在于此区域(在星号的行之间)。
注意:如果重要的话,所有代码都位于大型游戏循环中。

else
        {
            ***********************************
            NSString *rand = [NSString stringWithFormat:@"%@", randNumberS];
            while(lastTime + interval >= currentTime)
            {
        !!!!!!!!!NSString *user = [NSString stringWithFormat:@"%@", userText];
                    if([user isEqualToString: rand])
                    {
            ***********************************
                        score += 10;
                        randNumberS = nil;
                        timeToGenerateNum = true;
                        bottomClear = true;
                        break;
                    }
                    else
                    {

                        //NSLog(@"%@ != %@, %i", userText, randNumberS, score);
                    }

            }
            NSLog(@"Game Over! Your score was %i!", score);
        }
    }


每次我在启用僵尸程序之前运行(注意:代码连续运行了几秒钟),在标有“!”的行上都有一个Thread 6: Program received signal: "EXC_BAD_ACCESS"。启用僵尸后,它会运行几秒钟,然后停止工作,并在控制台中显示消息-[CFString respondsToSelector:]: message sent to deallocated instance 0x11168440。它还用“!”标记同一行。

我对这两种方法都进行了查找,它们都指出内存管理不佳,我尝试释放NSString对象,但是程序不允许我释放对象(注意:我收到此错误消息"release" is unavailable: not available in automatic reference counting mode)。

任何帮助将不胜感激,谢谢!

编辑:

userText用于多种方法中,但大多数用于此方法中。

-(IBAction)button1Clicked:(id)sender
{
if(userText == nil)
{
    userText = [NSString stringWithFormat:@"%i", 1];
}
else
{
    userText = [NSString stringWithFormat:@"%@%i",userText , 1];
}
bottomLabel.text = userText;
NSLog(@"Test 1");
}

最佳答案

userText变量不是有效的对象,这就是您的错误消息所指示的内容。通常,当您尝试使用指向不再存在的指针时,会发生EXC_BAD_ACCESS。然后启用了“僵尸”功能后,该消息将更加清晰,userText曾经是字符串,但是已经被释放。

编辑:

如果userText是实例变量,则建议使用属性,然后使用点表示法。在某处的@interface节中声明了userText。它看起来应该像这样:

@property (nonatomic, strong) NSString *userText;


然后在@implementaiton区域中,如下所示:

@synthesize userText = _userText;


这些一起使点符号可用,然后您应该使用self.userText在各处访问它(自定义访问器除外):

self.userText = @"something";
NSString *something = self.userText;

09-27 18:40