自動合成されたreadonly
&weak
プロパティがあります:
@property (nonatomic, readonly, weak) KTWindowController* windowController;
合成された ivar を割り当ててから、配列に追加します。
_windowController = [KTWindowController controller];
[self addSubController:_windowController];
これは、デバッグ ビルドで正常に機能します。しかし、リリース (アドホック) ビルドでは、これはすぐに nil に_windowController
なり、配列に nil を追加しようとして、アプリがクラッシュするという報告を受けました。
リリース (アドホック) ビルドの特定の設定 (最適化レベル?) によって、デバッグ ビルドと比較してこの動作が変わりますか?
この動作がデバッグ ビルドからリリース ビルドに変わるのは奇妙に思えます。しかし、私はこの動作を再現することができました。実際には理にかなっています - デバッグ ビルドで起こることと一貫性がない場合だけではありません。
推奨される回避策:
KTWindowController* windowController = [KTWindowController controller];
[self addSubController:windowController];
_windowController = windowController;
上記のようにローカル変数を使用する以外に、このような場合に推奨される回避策は何ですか?