1

さて、私は非常に混乱しているので、あなたの友人が私を助けてくれることを願っています。最新バージョン(.99 RC 1)であるCocos2Dを使用してプロジェクトに取り組んでいます。オブジェクトの寿命を変えるために、いくつかのプレーヤーオブジェクトといくつかのボタンを作成します。しかし、奇妙なことに、私が彼らの人生を-5変えようとすると、コードがクラッシュします。または、-1以外の負の値。

簡単ですが、NSnumberが-5の場合、呼び出されることすらなく、NSlogステートメントでクラッシュします。それで...どうしたの?

変数をよりよく保持することによってそれを解決しました。ありがとうございました!

4

2 に答える 2

2

わかった。これをもう一度言います。アクセサーはあなたの友達です。それらを使用してください。いつも。注:はい、Appleがinitとdeallocでそれらを使用しないことを推奨していることは知っていますが、15年間、これが一度も問題を引き起こしたことはなく、使用しないこともあります。この場合のように。使いたくない時もありますが、使いたくない時よりずっと少ないです。)

buttonTextメソッドの場合:

- (void)buttonText:(int)number 
{
    lifeChange = [NSNumber numberWithInt:number];
    NSString *text = [[NSString alloc] initWithFormat:@"%d", number];
    CCLabel *label = [CCLabel labelWithString:text fontName:@"Times New Roman"                                        fontSize:20];
    label.position = CGPointMake(35, 20);
    [self addChild:label];

 }

次のことを行う必要があります。

- (void)buttonText:(int)number 
{
    NSString *text = [[[NSString alloc] initWithFormat:@"%d", number] autorelease];
    CCLabel *label = [CCLabel labelWithString:text fontName:@"Times New Roman"                                        fontSize:20];

    [self setLifeChange:[NSNumber numberWithInt:number]];
    label.position = CGPointMake(35, 20);
    [self addChild:label];

 }

コードを見て、alloc / copy/retainの必要性とrelease/autoreleaseのバランスをどのように取っているかを理解してください。一見すると、あなたは本当にメモリ管理を台無しにしています。

于 2010-03-20T20:27:48.990 に答える
1

問題の一部は、「self.lifeChange」という表記をどこにも使用していないことです。これは、lifeChangeプロパティに割り当てたNSNumberオブジェクトが保持されないことを意味します。これは、NSNumberオブジェクトがランダムに死ぬ可能性があることを意味します。

に変更してself.lifeChange、それが役立つかどうかを確認してください。

于 2010-03-20T20:25:19.250 に答える