iOS 5への移行時に注意すべきこと 質問する

iOS 5への移行時に注意すべきこと 質問する

まとめ: iOS 5 に移行するときに注意すべき事項のチェックリストに追加していただけますか?iOS 5 へのアップグレード作業中、StackOverflow は非常に役立ちました。Xcode 4.2 より前に見逃していたかなり基本的な事柄がいくつか見つかりました。他にはどんな「落とし穴」が潜んでいるのか気になっています。

詳細:今週 iOS 5 が出荷されるので、いくつかのアプリに変更を加える必要がありました。Xcode 4.2 は新しい ARC 機能のおかげで、メモリ管理コードの分析がはるかに優れています。iOS 5 のアップデートは、すべてのメモリ管理コードを見直すのに絶好の機会です。新しいコンパイラは、以前のコンパイラが見逃していた他の多くの問題も検出します。Apple コンパイラ エンジニアに称賛を送ります。以下に、役に立った主な点を示します (その多くは以前のバージョンの iOS にも当てはまります)。

  1. 必ずdeallocメソッドの最後に[super dealloc]を呼び出します。始まりではありません。
  2. viewDidUnloadでは、最後に[super viewDidUnload]を呼び出す必要があるというバグが報告されていますviewDidUnload の最初ではなく、最後です。
  3. 保持カウント、合成セッター、リリースまたは自動リリースを呼び出すタイミングを理解します。新しいコンパイラは、古いコンパイラよりも多くの問題を指摘します。(私は注意していたつもりでしたが、どうやら十分ではなかったようです。)Appleのメモリ管理ガイド必読です。近道はありません。
  4. それは良い考えですデバッグ時にゾンビをオンにする(Xcode で、[製品] | [スキームの編集...] を選択し、[デバッグ] スキームを選択します。[診断] タブで [ゾンビ オブジェクトの有効化] をオンにします)。これにより、ゾンビ (使用すべきではないオブジェクト) の使用試行を見つけることができます。
  5. Leaks インストルメントも役立ちます。アプリをプロファイル モードで実行し、Leaks テンプレートを選択します。Instruments ウィンドウで、Leaks インストルメントを選択し、「Gather Leaked Memory Contents」というボックスをオンにすると、コード内のメモリ リークの発生場所を確認するのに役立ちます。

私が遭遇したいくつかの雑多な事柄があります:

    - (一方通行void) リリース { }

他に注意すべき潜在的な落とし穴はありますか? アプリは以前より安定しているように感じますが、以前もかなり満足していました。

ベストアンサー1

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

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

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

リストについて: [super viewDidUnload] は、viewDidUnload の最後のステートメントとして常に呼び出される必要があります。ロジックは [super dealloc] と同じです。[self viewDidUnload] は暗黙的に呼び出されないため (呼び出される場合もありますが)、dealloc でも呼び出す必要があります (メモリを解放していない場合)。

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

おすすめ記事