参照カウントの挙動も変わっているのだろうか?

iOSやmacOSで使われているSwiftでは、参照カウントによるメモリー管理が行われているが、その参照カウントが行われているタイミングについてはなかなかわからないところがある。もっとも、これはObjective-C+ARCでもそうだったと言えばそうなのだが。

とあるライブラリーで、iOS 10まではあるオブジェクトがnilになっていなかったため、問題なく動いていたのに、iOS 11ではnilになっていてクラッシュするというトラブルがあった。その原因の検証のために、以下のコードを書いて見た。

このパターンではobjB.ref = nilにした後は必ずobjC.refは解放されているので、nilになるのだが、このような書き方をしているコードでもGUIアプリ内のライブラリーの挙動によっては必ずしもそういう風にはならないことがあるらしく、正常に動いてしまうというようだ。

参照カウントの挙動においても、OSのバージョンの違いで違うことがあるらしく、思わぬトラブルを避けるためにも、怪しいコードの書き方をしていないか気をつけたい。

ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。ご用の方はコメントかコンタクトフォームにて。
スポンサーリンク

フォローする