0

私のアプリケーションには、同じタイプのボイドと関数を持つ多くのアニメーション (70、10 in 7 ビューコントローラーなど) があり、デバイスまたはシミュレーターで実行すると、アプリケーションがクラッシュします。
スレッドまたはディスパッチを使用してこれらのアニメーションを改善するにはどうすればよいですか、またはメモリに問題がありますか?
別の質問とチュートリアルで、アニメーションに同じ方法を使用してこれを行う方法は非常に単純です。コードは次のようになり、アプリで必要なアニメーションに対して繰り返します。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    [self CargarSonidos];
    [self getArrayEffectImagen1];
    self.imgImagen1.animationImages = self.arrayEffectImagen1;
    self.imgImagen1.animationDuration = 1.0f;
    [sonido play];

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)getArrayEffectImagen1
{
    NSMutableArray *arrayEfecto = [[NSMutableArray alloc] init];

    for (int i=0; i<14; i++) {
        UIImage *imagen = [UIImage imageNamed:[NSString stringWithFormat:@"Imagen%d.png",i]];
        [arrayEfecto addObject:imagen];
    }

    self.arrayEffectImagen1 = [NSArray arrayWithArray:arrayEfecto];
}

-(void)CargarSonidos
{
    NSURL *Imagen1Url = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"PrimerSonido"ofType:@"MP3"]];

    NSError *error;
    Sonido = [[AVAudioPlayer alloc]initWithContentsOfURL:Imagen1Url error:&error];

    if (error)
    {
        NSLog(@"Error in audioPlayer: %@",[error localizedDescription]);
    }
    else
    {
        Sonido.delegate = self;
        [Sonido prepareToPlay];
    }
}

-(IBAction)Animacion1
{
    [Sonido play];
    [self.imgImagen1 setAnimationRepeatCount:1];
    [self.imgImagen1 startAnimating];
}

-(void)audioPlayerDidFinishPlaying:
(AVAudioPlayer *)player successfully:(BOOL)flag
{
}
-(void)audioPlayerDecodeErrorDidOccur:
(AVAudioPlayer *)player error:(NSError *)error
{
}
-(void)audioPlayerBeginInterruption:(AVAudioPlayer *)player
{
}
-(void)audioPlayerEndInterruption:(AVAudioPlayer *)player
{
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [Sonido stop];
}

-(IBAction)TapOne:(UITapGestureRecognizer *)recognizer
{
    [self Animacion1];
}

Xcode 4.6 を使用しており、アプリは iOS 5.0 用です。ストーリーボードとモーダルまたはプッシュ セグエで ARC を使用しています。簡単な方法でこのアプリを作成してみました。何か知っているか、助けていただければ、スレッドまたはディスパッチを使用してこのコードをより良い方法で修正または改善するにはどうすればよいでしょうか?

AND o はい、クラッシュログは次のとおりです。

Incident Identifier: 3B38AB75-8A16-460E-BC07-55F5A0D4D2E6
CrashReporter Key:   3c4dd8277fec52e8c14d73ab348b62650bbf5226
Hardware Model:      iPhone3,1
OS Version:          iPhone OS 6.1.3 (10B329)
Kernel Version:      Darwin Kernel Version 13.0.0: Wed Feb 13 21:36:52 PST 2013; root:xnu-2107.7.55.2.2~1/RELEASE_ARM_S5L8930X
Date:                2013-06-20 10:18:17 -0400
Time since snapshot: 102 ms

Free pages:        1037
Active pages:      3050
Inactive pages:    2264
Throttled pages:   103507
Purgeable pages:   0
Wired pages:       19150
Largest process:   Simple Juego Prototipo

Processes
     Name                    <UUID>                       rpages       recent_max       [reason]          (state)

           timed <129ae7acc9bc3209a60ac42d49b0d89f>          290              379         [vm]         (daemon) (idle)
       Messenger <ee1787e4954037c4a692b76e4d7d4b6e>         1496             2138         [vm]         (resume)
       MobileSMS <3d75b813ead134998225651ca662356a>         1347             1347         [vm]         (background)
      MobileMail <e07ca7a7280736c7bf301451f89d1c02>          978              978         [vm]         (resume) (continuous)
     MobilePhone <51866c9bc9f93c9d8526e8acf9efc64c>         2181             2181         [vm]         (continuous)
            tccd <2778744d99a530c9a7d5e57a19b60008>          189              189         [vm]         (daemon)
             kbd <f7341c9a161a39acb5bc18ea47d6ebb7>          499              499         [vm]         (daemon)
      librariand <5c2a34477ddf3501aed0ec2d25caa09e>          208              208         [vm]         (daemon)
 Juego Prototipo <63bf4a5a839d3b3fa91700566bff69b3>        88101            88101         [vm]         (audio) (frontmost) (resume)
            ptpd <096297a7a40f318290a972274cc44d87>          735              735                      (daemon)
           wifid <72eda25ccdd737a79d6cd172e9bf99a5>          336              336                      (daemon)
    mediaserverd <af72564bf8713fb8b16ee64c5ee85568>         1004             1004                      (daemon)
     dataaccessd <abc7f74d5d683d4c9a04e7ade5b1126b>         1237             1237                      (daemon)
       locationd <137100f254373daeb894f665c413f8b0>          655              655                      (daemon)
   iaptransportd <9b3cf56b4db13761bbd8ac2e0ff099be>          223              223                      (daemon)
         syslogd <da215e2d3de133bf8f52590727b9bdfe>          146              146                      (daemon)
     SpringBoard <bd1d77d154ef3dffbb53d89337c8a08f>         3299             3299                     
      backboardd <e1dc74434e0e3938b17ff0f7ad85d138>         3944             3944                      (daemon)
         configd <b6a4d70640b63e8f82e0e9f3d6ee2bb9>          449              449                      (daemon)
       lockdownd <a123aa04ddf83a5fae8e5bc08f0b5771>          248              248                      (daemon)
   fairplayd.N90 <178af330594b392eab2c7b4499001e75>          143              143                      (daemon)
          powerd <63673a83ac9c3cf98fdc75df8ba70fd0>          143              143                      (daemon)
  UserEventAgent <7ee3410c25e4372d84e93318fe42696b>          471              471                      (daemon)
     debugserver <befb5a346ad43ac1be6790ab46eaceff>            0                0                      (daemon)
springboardservi <438ae856a1c039a197e6987a99a8b9b6>            0                0                      (daemon)
   syncdefaultsd <a18b8aeea66e3ebb9ab0d54e55c1b9d1>          195              195                      (daemon)
            afcd <3bd960d39c9f3972a10923db0e687b4a>          147              147                      (daemon)
    syslog_relay <ee47daae952636649230d38b3dc5c2e0>            0                0                      (daemon)
notification_pro <08df322fbe7739199f78852a511169ef>          129              129                      (daemon)
            afcd <3bd960d39c9f3972a10923db0e687b4a>          139              139                      (daemon)
             ubd <da941d158131359ab82559fdf8b99cb7>          347              347                      (daemon)
       CVMServer <0944339d86d03b94bf9deda6eecf5642>           72               72                      (daemon)
filecoordination <28ca39773e933ed2aa92c117c661d056>          129              129                      (daemon)
       distnoted <699b8253736233b29180419f139e8c01>          106              106                      (daemon)
            apsd <5be27dc5ea5234319bc4b47380e42174>          304              304                      (daemon)
      aggregated <c5a375854c3c31d59548ab53ea86d194>           88               88                      (daemon)
        networkd <49064febbe553338bd98051399022da4>          181              181                      (daemon)
       fseventsd <3ea853cb95de3aa48972aa42637af69a>          295              295                      (daemon)
        BTServer <af0150d5085e326598edff072a23d146>          436              436                      (daemon)
         imagent <2b64c6111aa63b179a15afd6a76a6696>          420              420                      (daemon)
   mDNSResponder <1e651badfb7033a68a73a667ec480a08>          210              210                      (daemon)
CommCenterClassi <19c784a3f93a35208de01bd47343facc>          637              637                      (daemon)
         notifyd <67a17b0c297e3785a9e09b8e72f3636a>          186              186                      (daemon)
     ReportCrash <68e323272a9d37c58ba4cdf1279764c4>          242              352                      (daemon)

**End**
4

1 に答える 1

0

ここでいくつかの問題が発生する可能性があります。

  1. 1 つの問題はimageNamed、画像をキャッシュすることです。imageWithContentsOfFile代わりに使用することを検討してください。imageNamedドキュメントが言うように:

    一度しか表示されないイメージ ファイルがあり、それがシステムのキャッシュに追加されないようにしたい場合は、代わりに を使用してイメージを作成する必要がありますimageWithContentsOfFile:。これにより、使い捨てのイメージがシステム イメージ キャッシュから除外され、アプリのメモリ使用特性が改善される可能性があります。

    したがって、1 回限りの (またはあまり使用されない) アニメーションに画像を使用する場合imageWithContentsOfFileは、imageNamed.

  2. アニメーションが完了すると (isAnimatingなどのプロパティをチェックすることで検出できますCADisplayLink)、これらのイメージへの強い参照を解放するnilanimationImagesプロパティを使用できます。UIImageView

  3. 画像のサイズは に適していUIImageViewますか? サイズ (ファイル サイズではなく、ピクセル単位で測定) がイメージ ビューのサイズを超えるイメージがある場合、iOS はビュー内のイメージのサイズを適切に変更しますが (に応じてcontentMode)、圧縮されていないイメージをメモリに保存します(通常、1 ピクセルあたり 4 バイトを使用します)。メモリへの影響を考慮するために、PNG/JPG ファイルのサイズを調べないでください (これらは、使用時にメモリ内で圧縮解除される圧縮ファイル形式であるためです)。基礎となる の寸法を見てくださいUIImage

    画像のサイズが画像ビューに必要なサイズを超える場合は、サイズを変更することをお勧めします。これは、イメージのサイズによっては、メモリ消費に劇的な影響を与える可能性があります。そこには多くの画像サイズ変更アルゴリズムがあります (この など)

于 2014-04-10T20:32:12.787 に答える