2011-11-10 7 views
0

를 할당 .
내가 NSLog(@"previous-animation:%@",previousAnimation);으로 그 값을 확인하는 기록 previousAnimation 시도, previousAnimation하지 않는 응용 프로그램이 충돌 나는 내 임무 잘못 뭐하는 거지 NULL나는 다음 (작업) 코드로 호출되는,있는 NSString 애니메이션이라는 가지고있는 NSString

입니까?

+1

동일한 방법이나 다른 방법으로이 두 문장을 사용하고 있습니까? 둘 다 언제 사형 당했습니까? – jrturton

답변

1

문자열을 복사하려고합니까? 그래서 당신은 일을해야하는 경우 :

NSString* previousAnimation = [NSString stringWithString:animation]; // autoreleased 

또는

NSString* previousAnimation = [animation copy]; // retain count 1, need to release 

그렇지 않으면 당신은

previousAnimation = [animation retain]; 

을 유지해야하며이 완료되면 previousAnimation를 놓습니다.

+0

고마워, 나는 [애니메이션 카피]했다. , 작동, stringWithString 또한 시도했다,하지만 그것은 충돌합니다. 왜 내가 그 사본을해야하는지 설명해 줄 수 있니? 재산과 다른 점은 무엇입니까? – Curnelious

+0

코드 줄 옆의 주석으로 말하면, stringWithString은 자동으로 릴리즈 된 객체를 제공하는 반면, copy는 retainCount 1을 가진 retain 객체를 제공한다. stringWithString과 충돌하는 이유는 예상하지 못하는 사이에 릴리스 될 가능성이 높습니다. – jbat100

3

animation을 올바르게 유지해야합니다. animationpreviousAnimation에 대한 보유 속성이있는 속성을 만들어 이와 같이 설정해야합니다.

self.animation = [rowInDatabase objectAtIndex:2]; 
... 
self.previousAnimation = self.animation; 

이제 두 값이 더 이상 호출간에 유지되어 더 이상 문제가 해결되지 않습니다. dealloc에서 두 값을 모두 해제해야합니다.

+0

감사합니다. 내가 왜 그 nstring 사건에서 그 재산을해야만하는지 이해할 수있게 도와 줄 수 있니? 나는 그 것을 이해할 수 없었다. 고마워. – Curnelious

1

이미 릴리스 된 변수를 할당하는 것처럼 들리므로 메모리가 다른 임의의 개체 (언급 한 경우 ccsprite 개체)에 의해 재사용됩니다. 그러나 더 많은 맥락에서 코드를 보지 않고도 확실하게 말할 수는 있습니다.