IBOutlets は ARC の下で強くなるべきか弱くなるべきか? 質問する

IBOutlets は ARC の下で強くなるべきか弱くなるべきか? 質問する

ARC を使用して iOS 5 専用に開発しています。 sIBOutletからUIViews (およびサブクラス) はと のどちらであるべきでしょうstrongweak?

次の:

@property (nonatomic, weak) IBOutlet UIButton *button;

これをすべて取り除きます:

- (void)viewDidUnload
{
    // ...
    self.button = nil;
    // ...
}

これを実行すると何か問題がありますか? テンプレートは、strong'Interface Builder' エディターからヘッダーに直接接続したときに作成される自動生成されたプロパティを使用していますが、なぜでしょうか?には、サブビューを保持するへの参照UIViewControllerが既にあります。strongview

ベストアンサー1

警告、古い回答:この回答はWWDC 2015の時点では最新ではありません。正しい回答については、受け入れられた回答(ダニエル・ホール) 上記。この回答は記録に残しておきます。


要約すると開発者ライブラリ:

実用的な観点から、iOS および OS X では、アウトレットは宣言されたプロパティとして定義する必要があります。アウトレットは、通常、弱いアウトレットである必要があります。ただし、ファイルの所有者から nib ファイル (または iOS ではストーリーボード シーン) 内の最上位オブジェクトへのアウトレットは強いアウトレットである必要があります。したがって、作成するアウトレットは、次の理由により、通常はデフォルトで弱いアウトレットになります。

  • たとえば、ビュー コントローラのビューのサブビューやウィンドウ コントローラのウィンドウに作成するアウトレットは、所有権を意味しないオブジェクト間の任意の参照です。

  • 強力なアウトレットは、フレームワーク クラスによって指定されることがよくあります (たとえば、UIViewController のビュー アウトレットや NSWindowController のウィンドウ アウトレットなど)。

    @property (weak) IBOutlet MyView *viewContainerSubview;
    @property (strong) IBOutlet MyOtherClass *topLevelObject;
    

おすすめ記事