TweetOverview のクラッシュ対策について

最近はしばらくTweetOverviewのクラッシュ対策を行っていましたが、これまでに行ったクラッシュ対策をまとめておきます。いまAppStoreにあるバージョンもかなり安定してきていますが、さらに手元で修正を進めて、かなりクラッシュはつぶせてきました。

TweetOverview ツイート俯瞰デスクサイドアプリ (Version 1.0.3) App
カテゴリ: ソーシャルネットワーキング
価格: 無料
デベロッパ名: J-Tech Creations, Inc.
リリース日: 2012/04/23
対応デバイス: iPad Wi-Fi+3G / iPod touch (4th Gen) / iPhone 4 / iPad 2 Wi-Fi+3G / iPhone 3GS / iPad 2 Wi-Fi / iPod touch (3rd Gen) / iPad Wi-Fi
現Ver.の平均評価: (無し / 0件の評価)
通算の平均評価: (4.0 / 4件の評価)
Game Center: 非対応
 


  1. メモリが足りないときには、下に隠れているviewControllerのviewDidUnloadが呼ばれる
  2. [UIKit]ViewDidLoad は一度しか呼ばれないと思っていました… | Zero4Racer PRO Developer’s Blog こちらに解説しました。ViewDidUnload – 再表示の際に ViewDidLoad という順番ですね。

  3. UIWebViewを含んだViewControllerを閉じるときの処理

  4. _webView.delegate = nil;
    if ([_webView isLoading]) {
    [_webView stopLoading];
    }

    こちらをdeallocの中、dismissModalViewControllerAnimatedを呼ぶ前に呼んでいます。最低限必要なのは、deallocの中じゃないかと思います。

  5. 広告Viewでのクラッシュを防ぐ
  6. どうもこれがよくわからないクラッシュの原因だったようです。しかも、UIWebViewをビューの中においている時にだけクラッシュしていたので、てっきりUIViewが悪さをしてるのかと思ったのですが、どうも、iAdやAdMobと関連していたようです。iAd Programming Guide: Working with Banner Views こちらのアップルのiADプログラミングガイドにはこのように書かれています。

    If the user navigates from a screen of content with a banner view to a screen that does not have a banner view, and you expect them to be on that screen for a long period of time, remove the banner view from the view hierarchy, set its delegate to nil and release it before transitioning to the new screen of content. More generally, avoid keeping a banner view around when it is invisible to the user.

    バナーを含むビューが長期間表示されない可能性がある場合、バナーを一度ビューから取り除き、delegateにnilを設定して、viewをreleaseしてください。簡単に言うと、バナーが見えないときには、AdBannerViewを保持しないでください。

    ということで、これを正しく行うようにコードを修正すると、クラッシュの事例がかなり解決されました。

安定したアプリを作るためには、テストが特に重要ですね。特にiOSは、メモリ不足が常時発生するので、それでも安定したプログラムを作るのは重要ですね。

「TweetOverview のクラッシュ対策について」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください