我正在使用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
正在被释放,并成为另一个对象。
我无法弄清楚如何防止对象被释放并更改为另一个对象。我试过retain
变量,但要么我做错了,要么就行不通。
非常感谢任何帮助。
答案 0 :(得分:-1)
好的。我终于弄明白了。感谢Droppy暗示这个问题。
我通过保留新字符串来修复它:
if (lastTwoChars.length < 2) {
lastTwoChars = [[lastTwoChars stringByAppendingString:text] retain];
} else {
lastTwoChars = [[lastTwoChars stringByAppendingString:text] retain];
lastTwoChars = [[lastTwoChars substringFromIndex:1] retain];
}
我不知道stringByAppendingString
和substringFromIndex
正在创建新的NSString
个对象,所以再次感谢Droppy。
这是我的新代码:
if (lastTwoChars.length < 2)
{
lastTwoChars[lastTwoChars.length] = (unichar) text;
}
else
{
lastTwoChars[0] = lastTwoChars[1];
lastTwoChars[1] = (unichar) text;
}