Приложение cocos2d ios завершается с ошибкой - неожиданная сделка - PullRequest
0 голосов
/ 21 июня 2011

У меня довольно простое приложение, с которым у меня проблема. Несколько секунд работает нормально, но через некоторое время вылетает. Вот мой код:

-(id) init
{
    if( (self=[super init] )) {
        self.isTouchEnabled = YES;
        trail = [[CCMotionStreak streakWithFade:3.0f minSeg:1 image:@"streak.png" width:6 length:50 color:ccc4(120, 250, 150, 200)] autorelease];
        [self addChild:trail z:1 tag:2];    
    }
    return self;
}
-(BOOL) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self ccTouchesMoved:touches withEvent:event];
    return YES;
}

-(BOOL)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint touchLocation = [touch locationInView: [touch view]]; 
    touchLocation = [[CCDirector sharedDirector] convertToGL: touchLocation];
    [trail setPosition:touchLocation]; 
    return YES;
}


-(BOOL)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    return YES;
}

А вот данные сеанса с консоли отладчика:

[Session started at 2011-06-21 14:37:41 +0800.]
2011-06-21 14:37:49.933 Particle[3587:207] cocos2d: cocos2d v0.9.0 beta2
2011-06-21 14:37:49.936 Particle[3587:207] cocos2d: Using Director Type:CCDisplayLinkDirector
2011-06-21 14:37:50.313 Particle[3587:207] cocos2d: Frame interval: 1
2011-06-21 14:38:01.880 Particle[3587:207] cocos2d: deallocing <CCRibbonSegment = 0603D000 | end = 50, begin = 50>

Право, когда происходит сбой, - это когда он выдает это освобождающее заявление. Есть идеи, что здесь происходит?

Дополнительные сведения: я попытался заменить 'autorelease' в инициализации следа на 'retain' и полностью удалить его, но ни один из них, похоже, не имеет значения.

1 Ответ

1 голос
/ 21 июня 2011

autorelease в этой строке вызывает проблему:

    trail = [[CCMotionStreak streakWithFade:3.0f minSeg:1 image:@"streak.png" width:6 length:50 color:ccc4(120, 250, 150, 200)] autorelease];

streakWithFade:minSeg:image:width:length:color: возвращает объект с автоматическим освобождением.Так как этот код автоматически высвобождает его снова, он получает слишком много вызовов для освобождения, когда пул автозапуска истощается.

...