gpt4 book ai didi

objective-c - Objective C 内存问题

转载 作者:行者123 更新时间:2023-11-28 20:33:35 25 4
gpt4 key购买 nike

我目前正在开发我的第一个 iPhone 应用程序,我快完成了,但是我在内存管理等方面遇到了问题。请记住,我非常擅长 Java,而且我只学习了 Objective C 大约 4 天。

所以,确切的问题出在这个区域(星号线之间)。注意:如果重要的话,所有代码都位于一个大游戏循环中。

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);
}
}

每次我在启用僵尸之前运行(注意:顺便说一句,代码运行了几秒钟),我在标有“!”。在我启用僵尸之后,它运行了几秒钟,然后停止工作,消息 -[CFString respondsToSelector:]: message sent to deallocated instance 0x11168440 出现在控制台中。它还用“!”标记同一行

我查看了这两个,它们都指向糟糕的内存管理,我尝试释放 NSString 对象,但我的程序不允许我释放对象(注意:我收到此错误消息 “release”不可用:在自动引用计数模式下不可用)。

非常感谢任何帮助,谢谢!

编辑:

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。然后启用 Zombies,消息更加清晰,userText 曾经是一个字符串,但已被释放。

编辑:

如果userText是一个实例变量,建议使用properties,然后使用dot notation。某处有一个 @interface 部分,其中声明了 userText。它应该看起来像这样:

@property (nonatomic, strong) NSString *userText;

然后在@implementaiton 区域,像这样:

@synthesize userText = _userText;

这些共同使点符号可用,然后您应该使用 self.userText 访问它任何地方(自定义访问器除外):

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

关于objective-c - Objective C 内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11376803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com