Я делаю это в моем главном Тема:Objective-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