5

Swiftは、「自動参照カウント」を使用して、もはや参照されずに不要になったオブジェクトの割り当てを解除します。 スウィフト言語ガイド[1]は次のように述べている:スイフトのARCオーバーフローの可能性?

あなたはクラスの新しいインスタンスを作成するたびに、ARCは、そのインスタンスに関する情報を格納するためのメモリのチャンクを割り当てます。このメモリは、そのインスタンスに関連付けられた格納されたプロパティの[...]値に関する情報を保持します。

リファレンスカウントが整数として格納されると仮定します。 参照カウンタがオーバーフローすることはありますか? これが当てはまる場合、これが私のプログラムに与える影響は、他の人が依然として参照しているオブジェクトは単に割り当てが解除されますか?

例として、カウンタが、たとえば符号なしの2バイトの整数だった場合、オブジェクトへの参照の上限が(正確な参照カウントを持ちながら)約130kになります。その上限に達してもう一度オブジェクトが参照されると、カウンタが1だけインクリメントされ、再び0に設定されます。

[1] https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html

+3

4294967296参考資料?ワウズ。あなたにも...それを行うのに十分な記憶がありますか? – Zizouz212

+0

私は質問がむしろ仮説的なものであることを認識していますが、その場合の行動は私には興味があります;) – Benjamin

答えて

7

NSObjectののretainCountは、64ビットOSの上で64ビットの符号なし整数です。 32ビットOSでは32ビットの符号なし整数です。これもアドレス空間のサイズなので、単一のオブジェクトへの参照を多数作成してカウントをオーバーフローさせることはできません。

関連する問題