gpt4 book ai didi

ios - 变量在调用之间被释放

转载 作者:行者123 更新时间:2023-11-28 17:50:43 27 4
gpt4 key购买 nike

我正在使用 Logos/Theos 为 iOS 开发一个调整。

我需要始终存储用户输入的最后两个字符。

我的代码是:

static NSString *lastTwoChars = [[NSString alloc] init];
...
if (lastTwoChars.length < 2) {
lastTwoChars = [lastTwoChars stringByAppendingString:text];
} else {
lastTwoChars = [lastTwoChars stringByAppendingString:text];
lastTwoChars = [lastTwoChars substringFromIndex:1];
}
...

(在此范围内,text 是他们在键盘上输入的最后一个字符)

这段代码工作正常,直到我按下第三个字符。经过很长时间的反复试验,我发现这是因为变量 lastTwoChars 正在释放,并成为一个不同的对象。

我不知道如何防止对象被释放并更改为另一个对象。我已尝试保留 变量,但要么我做错了,要么行不通。

如有任何帮助,我们将不胜感激。

最佳答案

好的。我终于弄明白了。感谢 Droppy 提示问题。

我通过保留新字符串修复了它:

if (lastTwoChars.length < 2) {
lastTwoChars = [[lastTwoChars stringByAppendingString:text] retain];
} else {
lastTwoChars = [[lastTwoChars stringByAppendingString:text] retain];
lastTwoChars = [[lastTwoChars substringFromIndex:1] retain];
}

我不知道 stringByAppendingStringsubstringFromIndex 正在创建新的 NSString 对象,所以再次感谢 Droppy。

编辑:我认为这可能是内存泄漏,但 Droppy 确认是。

这是我的新代码:

if (lastTwoChars.length < 2)
{
lastTwoChars[lastTwoChars.length] = (unichar) text;
}
else
{
lastTwoChars[0] = lastTwoChars[1];
lastTwoChars[1] = (unichar) text;
}

关于ios - 变量在调用之间被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38836913/

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