调用之间的变量释放

时间:2016-08-08 19:16:20

标签: ios objective-c theos logos

我正在使用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变量,但要么我做错了,要么就行不通。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:-1)

好的。我终于弄明白了。感谢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;
}