1

cocos2Dbox2Dプロジェクトで使用しているオブジェクトがゴミで上書きされるという問題が発生しています。少しデバッグした後、次の行が次の行から変更された場合にわかりました。

player = [[[Player alloc] initWithWorld:world atLocation:ccp(playerPositionX, playerPositionY)] autorelease];

player = [[Player alloc] initWithWorld:world atLocation:ccp(playerPositionX, playerPositionY)];

その後、問題はなくなります。このコードと基礎となるクラス定義は、Learning Cocos2Dブックで説明されているSpaceVikingプロジェクトからのコードのコピーであるため、これは非常に混乱します。

おそらく問題は、新しいプロジェクトを作成したときに、自動参照カウントの選択肢を選択したままにしていた可能性があるのに対し、SpaceVikingプロジェクトではそれを行っていない可能性があることに気付きました。現在xcode4.6を使用していますが、このプロジェクトでARCが使用されているかどうかを判断する方法がわかりません。ビルド設定に移動して自動参照カウントを検索しましたが、見つかりませんでした。

プロジェクトが自動参照カウントを使用しているかどうかを確認するにはどうすればよいですか?

4

3 に答える 3

3

これを試して:

#if __has_feature(objc_arc)
/* ARC is used */
#endif
于 2013-02-27T15:47:47.837 に答える
1

してみてください

[player release];

「ARC制限」エラーが発生するはずです

于 2013-02-27T15:53:57.017 に答える
1

ARCを使用せずにビルドしていることはすでにわかります。有効にすると、を呼び出すとautoreleaseコンパイラエラーが発生します。これは、もちろん、実際の問題がARCとは関係がないことを示しています。autorelease呼び出しを削除すると、オブジェクトが過剰に解放されるのを防ぐことができますが、リークが発生する可能性もあります。

ただし、これまでに提案された他の方法に加えて、プロジェクト全体またはターゲット全体のレベルで通常ARCを制御する場所をXcodeで見つけることもできます。ナビゲーターでプロジェクトを選択し、[ビルド設定]タブで、[Apple LLVMコンパイラ4.2-言語]の下の[Objective-C自動参照カウント]を探します(または上部の検索ボックスを使用して[自動参照カウント]を探しますまたは「ARC」。他の誰かが最初に設定したプロジェクトを使用している場合は、-fobjc-arcまたは-fno-objc-arcフラグがファイルごとのレベルで設定されているかどうかを確認することもできます。これは、プロジェクトのビルドフェーズ->ソースのコンパイルの下にあります。ターゲットはXcodeで選択されます。

于 2013-02-27T16:55:39.320 に答える