0

アクションでアクティブ化された画像の操作を中心としたアプリケーションがあります。アプリケーションのほとんどは、以下のさまざまなバリエーションで構成されます。

-(IBAction)tap{
    if(a == 0){
        a = 1;
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:(1.8)];
        [image setAlpha:1];
    }else if (a== 1){
        a = 0;
        [image setAlpha:0];
    }
     [UIView commitAnimations;
}

問題は、複数のメモリ警告を受け取っているため、iPad でこれを実行する可能性がないことです。アクティビティ指向のツールは、アプリケーションがアクセスされたときに「backboardd」が 287 メガバイトを使用することを明確に示しています。すべてのビュー コントローラーの中で最も重いものがアクセスされると、私のアプリケーションは単純にクラッシュします。私の質問は、それらの画像が絶対に必要になるまで、それらの画像をどのようにリリースするかということです. ARC 指向の方法を使用する場合、多くの方法は厳密に禁止されていることに注意してください。この投稿に返信することで、私を支援する試みに感謝します。

更新: 以下を見ると、画像を読み込む機能を提供するセグメントが表示されます。

-(IBAction)thisisanaction{
    UIImage *letter = [UIImage imageNamed:@"HelloWorld.png"];
    [imageholder setImage:letter];

追加情報:

#   Address Category    Timestamp   Live    Size    Responsible Library Responsible Caller
2   0x4c4e000   VM: ImageIO_PNG_Data    00:02.263.286   •   128.59 MB   ImageIO ImageIO_Malloc
4

2 に答える 2

4

+[UIImage imageNamed:]画像の読み込みに使用していますか? その場合、これらのイメージは、メモリ警告が発生するまでシステム フレームワークによってキャッシュされ+[UIImage imageWithContentsOfFile:]ます。ライフサイクルを制御できる方法でイメージをロードするために を使用できます。

システム フレームワークは、(理論的には)+[UIImage imageNamed:]メモリ警告が発生したときにキャッシュされたイメージを解放しますが、経験上、メモリ警告はインターロックされていないことがわかっています。つまり、プロセスが強制終了される前に、消費を削減するための十分な時間が必ずしもあるとは限りません。

あなたが投稿したコードから:

-(IBAction)thisisanaction{
    UIImage* letter = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @"HelloWorld" ofType: @"png"]];
    [imageholder setImage:letter];

これにより、システムキャッシュに準無期限に保持されることはありません。コードの残りの部分がそれを適切に処理するかどうかはわかりませんが、これにより+[UIImage imageNamed:].

于 2013-08-01T13:44:50.073 に答える
0

+[UIImage imageNamed:] を使用して多くの異なる画像をロードしたときに同様のメモリの問題が発生しましたが、代わりに +[UIImage imageWithContentsOfFile:] を使用する ipmcc のソリューションで問題が解決しました。どうもありがとう!

于 2014-01-08T19:13:19.600 に答える