ARC での IBOutlet と viewDidUnload 質問する

ARC での IBOutlet と viewDidUnload 質問する

SOにも似たような質問がありますここただし、そこでは十分に説明されていなかった点について明確にしておきたいと思います。

すべてのデリゲートとアウトレット (実際は「親」オブジェクトへの参照、善良な市民としてオブジェクト グラフについて少し考えてみてください) は、弱参照をゼロにする必要があることは理解しています。弱ポインタ​​をゼロにする性質上、参照されたオブジェクトの保持カウントがゼロに達すると、弱ポインタ​​は自動的に nil に低下しますが、これは IBOutlets を nil に設定することがviewDidUnload不要になったことを意味しますか?

したがって、アウトレットを次のように宣言するとします。

@property (nonatomic, weak) IBOutlet UILabel *myLabel;

次のコードは効果がありますか?

- (void)viewDidUnload
{
    self.myLabel = nil;

    [super viewDidUnload];
}

ベストアンサー1

ちょっと調べてみただけです...

私の理解では、weak は、どちらも弱参照であるという点で、assign に似ています。

ただし、assign はゼロ参照を作成しません。つまり、問題のオブジェクトが破棄され、そのプロパティにアクセスすると、 が取得されますBAD_ACCESS_EXCEPTION

弱いプロパティは、参照しているオブジェクトが破棄されると自動的にゼロ (= nil) になります。

どちらの場合も、プロパティを nil に設定する必要はありません。これは、問題のオブジェクトの保持カウントには影響しないためです。保持プロパティを使用する場合は必要です。

どうやら、ARC では「retain」と同じ新しい「strong」プロパティも導入されているようです。

研究完了ここ

おすすめ記事