1

インターフェイス ビルダーを使用して UI 要素を設計するのが好きですが、条件に応じて異なるサブビューが表示される画面を設計しています。私にとっては、これらのサブビューを個別のnibファイルで設計し、必要に応じてView Controllerにロードする方が簡単です.

たとえば、基本的にアクティビティ インジケーターを表示するオーバーレイである、遅延ロードされる次のアクティビティ ビューがあります。これを別のビュー コントローラーで再利用するオプションが必要です。

これは、View Controller の 1 つの getter メソッドです。

- (ActivityView *)activityView
{
    if (!activityView) {
        activityView = [[[UINib nibWithNibName:@"ActivityView" bundle:nil]
                instantiateWithOwner:self options:nil] lastObject];
    }
    return activityView;
}

nib ファイルでは、複数のビュー コントローラーで使用できるようにするため、所有者をビュー コントローラーと一致するように設定しませんが、最上位ビューを ActivityView クラスにリンクして、その UI の一部をプログラムでカスタマイズできるようにします。

このアプローチは私にはうまくいくようですが、これは良いアプローチでしょうか?

リソースプログラミングガイドでは、次のように述べています。

重要: ロードした nib ファイルのトップレベル オブジェクトの処理が終了したら、これらのオブジェクトを解放する責任があります。そうしないと、多くのアプリケーションでメモリ リークが発生します。トップレベルのオブジェクトを解放した後、nib ファイル内のオブジェクトを指しているアウトレットを nil に設定してクリアすることをお勧めします。トップレベルのオブジェクトだけでなく、nib ファイルのすべてのオブジェクトに関連付けられたアウトレットをクリアする必要があります。

ARC を持っている場合にこれが適用できるかどうか、また ARC について何をする必要があるかがわかりませんでした。

これは、didReceiveMemoryWarning メソッドで self.activityView = nil を設定する必要があるということですか?

4

0 に答える 0