2011-06-21 5 views
0

私は問題を抱えているかなり簡単なアプリを持っています。それは数秒間うまく動作しますが、しばらくするとクラッシュします。ここに私のコードです:cocos2d iosアプリがエラーなしでクラッシュする - 予期しないdealloc

-(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> 

を、それがクラッシュしたときに右され、それが与えるとき、その文をdeallocing。ここで何が起こっているか考えてみましょうか?

その他の詳細:トレイルの初期化で '保持'を置き換えて完全に削除しようとしましたが、どちらも違いはありません。

答えて

1

この行の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:。このコードは再び自動解放するので、自動解放プールが空になったときに解放呼び出しが多すぎます。

+0

"autorelease"を "retain"に置き換えて完全に削除しようとしました。どちらも違いを生み出さないようです。 – Fibericon

+0

テンプレートから新しいcocos2dプロジェクトを作成し、HelloWorldLayerのinitメソッドをinitメソッドに置き換え、CCNode *型のtrail ivarを追加してtouchesメソッドを追加してコードを試しました。しかし、シミュレータでクラッシュすることはありません。私はcocos2d v1.0.0-rcを実行しています。それは、cocos2dのそれ以降のバージョンで修正されたバグでしょうか? (ところで、ccTouches ...メソッドはシグネチャをvoidに戻すように変更したので、私もそれらを変更しましたが、大きな違いがあったのでしょうか?) –

+0

バグをアップデートして修正しました。ご協力いただきありがとうございます!私は信じる前に0.9.0.0を使っていました。 – Fibericon

関連する問題