2011-10-14 6 views
28

要約:iOS 5に移行する際の注意事項を追加できますか? StackOverflowは、iOS 5へのアップグレードに携わったので、非常に貴重です。Xcode 4.2より前に欠けていたかなり基本的なものを発見しました。他の "落書き"が潜んでいるかもしれないと思います。iOS 5に移行する際の注意点

詳細:今週の出荷はiOS 5で、いくつかのアプリにいくつかの変更を加えなければなりませんでした。新しいARC機能のため、Xcode 4.2ではメモリ管理コードの分析がはるかに優れています。 iOS 5アップデートは、すべてのメモリ管理コードを確認するのに最適なポイントです。新しいコンパイラには、以前のコンパイラが見逃していた他の多くの問題もあります。アップルのコンパイラエンジニアに賞賛します。ここでは、助けてくれた主なものがあります(その多くは、以前のバージョンのiOSにも当てはまります)。

  1. 先頭にではなく、call [super dealloc] at the END of your dealloc methodsにしてください。
  2. viewDidUnloadでは、あなたのviewDidUnloadの先頭ではなく、some people have reported bugs that require [super viewDidUnload] to be called at the endです。
  3. 保持カウント、合成されたセッター、解放または自動解放を呼び出すタイミングについて理解しています。新しいコンパイラは、古いコンパイラよりも多くの問題を指摘します。 (私は気をつけていたと思ったが、明らかに十分な注意を払っていなかった。)Appleのmemory management guideは読んでおく必要があり、ショートカットは必要ない。
  4. turn on zombies when debugging(Xcodeでは、Product | Edit Scheme ...を選択してデバッグ方式を選択し、[Diagnostics]タブで[Enable Zombie Objects]をオンにします)。これはゾンビの使用を試みるのに役立ちます(あなたはもはや使用してはいけないオブジェクト)。
  5. リークスツールも役立ちます。プロファイルモードでアプリを実行し、リークテンプレートを選択します。インストゥルメントウィンドウでリーク音源を選択し、 "リークしたメモリ内容を収集する"ボックスをチェックすると、リークしたメモリがコード内でどこから発生しているかを確認するのに役立ちます。

があり、いくつかのオッズであり、私が遭遇した終了:

 
    - (oneway void) release { } 
  • あなたは可能性があります

    私が探すべき潜在的な落とし穴の他の提案はありますか?私のアプリは今より安定していると感じていますが、以前はかなり気分が良くなっていました。

+1

メモリ管理ではありませんが、とにかく重要です。データをダウンロードしてデバイスに保存する場合は、ドキュメントフォルダに保存しないように注意してください。そのためにライブラリ/キャッシュまたはtmpを使用してください。バンドルIDで追加されたNSApplicationSupportDirectoryにアプリケーションデータを格納します。詳細はhttp://developer.apple.com/library/mac/#documentation/FileManagement/Conceptual/FileSystemProgrammingGUide/FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW1を参照してください。 –

+1

メモリ管理もしません。しかし、あなたがセキュリティ/証明書関連のものをやっている場合。 MD5ハッシュされた証明書がSecTrustEvaluateのkSecTrustResultRecoverableTrustFailureを返すことを覚えておいてください。 ios5はMD5ハッシュが安全でないとみなすからです。 – n3utrino

+1

IOS5に移行するためのもう1つの点は廃止予定のUDIDです。 http://stackoverflow.com/questions/6993325/uidevice-uniqueidentifier-deprecated-what-to-do-now –

答えて

6

1/Modalコントローラは、サイズを変更した場合、動作が異なります。異なるサイズのモーダルダイアログが必要な場合は、iOS 5子ビューコントローラの使用を検討してください。

2 /テーブルの場合、セクションヘッダーと正の高さが返されていた場合、iOS 4ではヘッダーが非表示になっていました。 iOS 5では、ゼロのヘッダーの高さをゼロに戻す必要があります。

3/UDIDは推奨されていません。 CFUUIDCreateを使用して一意のIDを作成して設定に保存できますが、同じIDを持つ2つのデバイスを残して、デバイスデータをバックアップして別のデバイスに復元できることに注意してください。私は属性kSecAttrAccessibleWhenUnlockedThisDeviceOnlyでキーチェーンに私のIDを保存することによって状況を解決しました。

リストについて: [super viewDidUnload]は、常にviewDidUnloadの最後のステートメントとして呼び出される必要があります。ロジックは[super dealloc]と同じです。 deallocの中で[self viewDidUnload]を呼び出す必要があることに注意してください(暗黙的に呼び出されることはありません)。

私の実験から、Instrumentsのリーク検出では、プロパティ名を割り当てずに合成されたプロパティのリークは報告されません。

+0

答えをありがとう。私のために何かを明確にすることができますか? [super viewDidUnload]を呼び出すときに同じことを言っていると思います。また、[self viewDidUnload]を呼び出す必要がある状況の提案をより明確に示すために、回答を改善します。 –

+3

一般に、ARCを使用していてIBOutletsが弱い場合、ビューがアンロードされるとすべてがアンロードされます。しかし、ARCと強力な(保持する)IBOutlets(ビューから動的に追加または削除する場合)を使用しない場合は、それらをviewDidUnloadの内部に解放したいとします。ただし、deallocメソッドでもそれらを解放したいとします。コードの二重性を取り除くには、deallocからviewDidUnloadを呼び出すだけです。ビューコントローラが解放されたときに自動的に呼び出されないので、常にそこに配置する必要があります。 – Sulthan

関連する問題