에 출시 :목표 - C : 하나 개의 스레드에 할당하고 내 메인 스레드에서이 일을하고
CCAnimation *anim; //class variable
[NSThread detachNewThreadSelector:@selector(loadAimation) toTarget:self withObject:nil];
loadAimation에서 :
-(void) loadAnimation {
NSAutoreleasePool *autoreleasepool = [[NSAutoreleasePool alloc] init];
anim = [[CCAnimaton alloc] init];
[autoreleasepool drain];
}
을 그리고 메인 스레드에서 내가 그것을 해제 :
[anim release];
이제 메모리 관리와 관련하여 문제가 없는지 묻고 싶습니다.
'loadAimation'은 (는)'loadAnimation'입니까? 왜'anim'은 속성이 아닌 클래스 변수입니까? 이 릴리스의 코드는 무엇입니까? 객체 생성과 파기가 균형이 잘 이루어 졌는지 알 수있는 충분한 정보가 없습니다. – outis
네, 맞습니다. 문제가 정말로 릴리스 주위에서 일어나는 것 같아요. (이게 괜찮은지 물어보고 싶었을뿐입니다). 실제로 그것은 cocos2d와 관련이 있습니다. 릴리즈 전 CCAction을 만들고 CCSprite * sp를 가지고 있습니다. [sp runAction : anim]; 애니메이션이 실행되는 동안 시각적으로 애니메이션에는 아무 일도 일어나지 않지만 그것을 풀어주는 것이 맞습니까? – Asymptote
모든 것이 어떻게 구현되는지에 따라 다릅니다. 소유권을 갖는 모든 객체는 애니메이션을 유지합니다. 객체가 소유권을 갖지 않으면 애니메이션을 유지하지 않습니다. 소유권 규칙에 대해 cocos2d 문서를 확인하십시오. 그럼에도 불구하고 메모리 관리 문제를 일으키는 [경쟁 조건] (http://en.wikipedia.org/wiki/Race_condition)을 실행할 수 있습니다 (예 : 소유 객체가 메모리를 유지하기 전에 한 스레드에서 애니메이션이 릴리스 됨) 다른 스레드). – outis