2

iPad1 で次のコードを使用するとアプリがクラッシュしますが、iPad3 では問題なく動作しています。

roboObj.animationImages=[NSArray arrayWithObjects:[UIImage imageNamed:@"p4Robot1.png"],[UIImage imageNamed:@"paot4.png"],[UIImage imageNamed:@"4Robot5.png"],[UIImage imageNamed:@"pagot8.png"],[UIImage imageNamed:@"page4t9.png"],[UIImage imageNamed:@"page10.png"],[UIImage imageNamed:@"pabot11.png"],[UIImage imageNamed:@"pagt12.png"],[UIImage imageNamed:@"page4ot13.png"],[UIImage imageNamed:@"pbot2.png"],[UIImage imageNamed:@"paot3.png"],[UIImage imageNamed:@"page.png"],[UIImage imageNamed:@"pagt15.png"],[UIImage imageNamed:@"page4t16.png"],[UIImage imageNamed:@"pagbot17.png"],[UIImage imageNamed:@"pa18.png"],[UIImage imageNamed:@"page18.png"],[UIImage imageNamed:@"pa18.png"],[UIImage imageNamed:@"pag18.png"],[UIImage imageNamed:@"page8.png"],[UIImage imageNamed:@"pagbot18.png"],[UIImage imageNamed:@"paot17.png"],[UIImage imageNamed:@"pot16.png"],[UIImage imageNamed:@"pt15.png"],nil];
        roboObj.animationDuration=4;
        roboObj.animationRepeatCount=1;
        [roboObj startAnimating];

時々、メモリ警告「Received memory warning.Level=1」と「Received memory warning.Level=2」が表示されます。

誰でもこの問題を解決する方法を教えてください。どんな助けでも大歓迎です。

4

2 に答える 2

0

アニメーションを繰り返し実行しようとしているときに、画像の読み込み方法を変更する必要があります。これがあなたが探している正確な答えであるかどうかはわかりませんが、ある程度はアイデアが得られます。

この記事を見てください...

UIImageView AnimationImages のメモリ リーク

UIImageView を使用してアニメーションを行うには、NSArray に画像をロードし、それを UIImageView の animationImages プロパティに設定し、関数 startAnimating を呼び出します。しかし、この方法を使用して異なる画像を何度もロードしてアニメーションを繰り返そうとすると、Xcode デバッグでステータス 101 の iPhone デバイスでクラッシュが発生し始めます。繰り返しになりますが、iPhone デバイスでアプリに使用できるメモリがなくなったため、クラッシュした理由は誰もが知っています。しかし、私たちの記憶はどこへ行ったのでしょう。これがその答えです。animationImages は UIImageView のコピー プロパティであるため、NSArray を animationImages に設定するたびに、データ全体がコピーされます。そして、同じ animationImages を他の NSArray で再度設定しようとすると、最初にそれを nil してから、新しい配列で設定しようとします。しかし、ここでは間違っています。このプロパティを nil すると、ガベージ コレクタが存在しないため、リアルタイム メモリは減少しますが、仮想メモリは減少しません。したがって、代わりに nil このプロパティの release メソッドを呼び出す必要があります。これにより、仮想メモリからも強制的に解放されます。覚えておくべきもう 1 つのことは、このプロパティの release メソッドを呼び出さないか、UIImageView の参照が解放される dealloc メソッドでこのプロパティを nil にしようとしないことです。そうしないと、Bad Parameter 警告が表示されるか、仮想メモリが取得されません解放されました。

サンプルコードもここに記載されています。

于 2013-01-22T07:25:52.893 に答える
0

画像が大きすぎる可能性があります。とにかくiPad 1にはRetinaディスプレイがありません。画像を半分のサイズに縮小して、もう一度やり直してください。

于 2013-01-22T07:26:09.653 に答える