ねえ、私は私のアプリでいくつかの問題を抱えています。これはIOSにとっての私の最初の大きなプロジェクトであり、これまでのところ、あちこちで問題を抱えているいくつかの部分をかなりうまくやっています。しかし、開発が基本的に終わった今、私は最大の問題を抱えており、それはしばらくの間私を悩ませてきました、そして私は壁にぶつかりました。私はまだ何をすべきかわかりません(私には1つのアイデアがありますが、それがうまくいくかどうかはわかりません)。私のコンピューターでは、ほとんどの場合動作します。いつかそれ
クラッシュしてエラーが発生します(以下を参照)。エラーが発生したときに私がすることは、通常、ゲームが機能していて、突然停止することです。私は実際にしばらくの間エラーを受け取っていません、そしてそれが開発中であったときに私はほとんどそれを受け取りました。アプリを上司のマシンまたは実際のデバイスのいずれかで実行すると(私のマシンからではなく、彼女のマシンからデバイスにアプリをアップロードすることに注意してください)、クラッシュします。常に同じポイントでクラッシュします。最初のビューであるタイトル画面が表示されます。次に、スタートボタンをクリックすると、新しいビューが起動します。ただし、スタートボタンをクリックすると、アプリがクラッシュします。何が起こるかというと、アプリが閉じて、デバッガーがコードのこの部分に移動します。
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class]));
}
}
また、アプリはゲームです。すべてのビューはOpengelEsを使用します。何が起こっているのかと思っているのは、多くのメモリが使用されているということです。ゲームは実行中です。システムはより多くのメモリを必要とし、システムはメモリを解放するプロセスを強制終了します。プロセスはアプリです。これは、IOSとアプリケーションのライフサイクルについて私が知っていることに基づいています。私はARCを使用していますが、特にツールを使用してゲームをテストしましたが、問題を引き起こす可能性のあるメモリリークなどは見つかりませんでした。画像はファイルサイズが大きいのではないかと思います。画像の範囲は100kbから5MBです。サイズを小さくしていますが、それが問題かどうかはわかりません。今のところ、クラッシュする理由として私が持っている唯一のリードは、メモリが不足していることであり、私が見つけた唯一の理由はファイルサイズです。これが原因であると100%確信しているわけではありません。これは、私のマシンで(少なくとも最近では)クラッシュしない理由を説明していないためですが、彼女ではクラッシュします(彼女のマシンとデバイスでクラッシュする理由を説明し、説明していますなぜそれが私のもので時々起こるのに、それらが異なる条件下で起こるのではないのか)。また、これが発生した場合、ある種のメモリ不足の警告が発生するはずだといつも聞いています。誰かがこれを否定することを確認できますか(私はこれを調査しましたが、多くは見つかりませんでした
ですから、私が求めているのは、誰かがこの問題の原因についてこれ以上の提案をするか、少なくとも私がもっと研究すべきトピックに私を導くかもしれないかどうかです。画像のファイルサイズを小さくするとうまくいくと思いますか。1つの背景が約1〜3である傾向があり、その後、100kbの8〜40の画像が存在する傾向があります。
編集 私はプロファイルモードの楽器を使用しました。アプリは100mbの使用を開始し、再生中に500mbまで上昇しました(これは実際のメモリにあります)。新しいレベルに切り替えたときだけメモリが増えたことに気づきました。各レベルでより多くの画像が表示されているためだと思いましたが、テストを行いました。テストでは、レベルが終了レベルのときに次のレベルに進む代わりに、レベル1が再度再生されます。各レベルはクラスレベルのオブジェクトです。私のViewControler(GLKViewControllerのサブクラス)には、currentLevelというプロパティがあります。ゲームは次のコードで次のレベルに切り替わります。
-(void) nextLevel: (Level) newLevel
{
//play sound
MyAppDelage *del=[[UIApplication sharedApplication] delegate];
UIWindow *main=[delegate window];
MyViewControler *view=(MyViewControler*) main.rootViewController;
view.currentLevel=newLevel;
}
だから私が起こっていると思うのは、古いレベルでは何らかの理由でガベージコレクションが行われることは決してないということです。それが何か違う場合、currentLevelは強いです。また、@ synthesize currentLevel = _currentLevel; これは、ObjectiveCを最初に学習したときに書いた本当に古いコードです。私は当時の例に従っていました。強い型を変更するか、@ synthesize部分を削除すると、この問題が解決する可能性がありますか?私はより多くのC++/ C#/ Java構文に慣れているので、ObjectiveCスタイルのいくつかにはまだ慣れていません。