2

最近、既存のCocos2Dプロジェクトをバージョン0.8から2.0に移行し、ARCを有効にしました。

私がそれをした方法は、Appleの空のアプリケーションテンプレートと、大きな変更があるため、Cocos2d2.xテンプレートからコードを追加することです。その後、ゲームからコードを追加し、非推奨のコードとARCの問題に必要な変更を加えました。

ゲームは機能しているが期待どおりではなかったので、アニメーションはなく、ゲームはCPUパワー全体を使用していました。コンソールから、作成直後にすべてが割り当て解除されることがわかりました。私の古いコードは、私のシーンがプッシュされる前に発生するため、その理由ではありません。

ここに画像の説明を入力してください

編集 私もプロセス全体を繰り返し、Cocos2DテンプレートプロジェクトからARC対応バージョンを作成しましたが、そこでも同じです。それは通常のことですか?

4

1 に答える 1

1

ARCに変換する際の一般的な問題ですが、これは正常ではありません。ARCはオブジェクトをスコープ外に解放しますが、MRCではalloc / initオブジェクトはメモリに残ります(そしてリークします)。強力な参照を保持する必要がある場所を確認してください。

ARCに変換する前に機能した例を次に示します。

-(void) someMethod
{
    id object = [[MyObject alloc] init];
}

MRCでは、someMethodが戻った後、オブジェクトはメモリに残ります(リーク)。ARCでは、ARCはメソッドが戻ったときにオブジェクトをクリーンアップします。最も簡単な修正は、オブジェクトをivar(別名インスタンス変数、クラスのメンバー)に変換することです。

シングルトンも確認してください。実装方法によっては、Singletonクラスがすぐに割り当てを解除する場合があります。たとえば、静的インスタンスが__weakまたは__unsafe_unretainedと宣言されている場合。

また、Xcodeアナライザー([ビルド]-> [分析])を実行して、潜在的な問題のポインターを取得する必要があります。

于 2012-10-01T11:28:28.313 に答える