2016-08-08 4 views
1

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

당신이 실제로 어떻게 사용하는 방법은, 새로운'NSString' 오브젝트를 돌려줍니다. ARC 또는 MRC를 사용하고 있습니까? – Droppy

+0

@Droppy 기본값은 무엇이든간에. 나는 그것을 다르게 구성하지 않았다. –

답변

-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; 
} 
+0

이제는 메모리 누수가 발생했습니다 ... 항상 마지막 2 문자를 원하면'static unichar lastTwoChars [2];를 사용하지 않으시겠습니까? – Droppy

+0

@Droppy 나는 그것을 생각하지 않았다, 고마워. 나는 그 대답을 편집했다. 그게 옳은 것 같니? –

+0

아니요, 전혀 아닙니다. '[text characterAtIndex : index]'가 필요합니다. 여기서'index'를 계산해야합니다. – Droppy

관련 문제