質問: [] //初期化 ``` これに似たコードを書いているのですが、複数回実行していると挙動が重くなりおかしくなり始めるので 何かメモリ内にゴミが貯まっているのかもしれないと思い、質問させて頂くことにしました。 実際のコードではクロージャなども使用して配列に対して値を代入しています。
回答: 「これで」と言うのがご質問に書かれたコードのことを指しているのであれば、何の問題もありません。 ***これに似たコードを書いている*** ご質問のコードには何の問題もありませんが、それに似たあなたのコードに問題がないかどうかはコードを見ないと何とも言えません。あなたにとっては「これくらいは本質的な違いではない」と思って、簡略化したコードを掲載されているのだと思うのですが、そのほんのちょっとの差が大きな違いを生んでいるかもしれません。 ***実際のコードではクロージャなども使用して*** そのクロージャは例えば非同期処理に関わってメインスレッド以外から実行されていると言うことはないでしょうか?Swiftの配列はスレッドセーフではないので、複数スレッドから同時にアクセスするようなことがあれば「挙動が重く」なったり、クラッシュしたり、場合によってはCPUが暴走してデバイスが過熱して爆発する、なんてことも可能性としては考えられます。 Swiftの配列は値型としての振る舞いをしないといけない上に、Objective-Cの`NSArray`と相互変換できるように考えられているため、裏ではかなり複雑なことをやっています。そのせいで極めて限定的な場合にだけ発生するバグ、とかが、いままでになかったわけではないですが、そんなものに遭遇することは滅多にありません。 「挙動が重くなりおかしくなり始める」なんてことがあるのなら、あなたがお示しにならなかった部分で、何か変なことをしている可能性が大と考えられます。 「複数回実行していると挙動が重くなりおかしくなり始める」と言う現象が再現できるようなコードはご提示いただけないでしょうか? 現在示されているコードを10万回ばかり繰り返して実行してみましたが、「挙動が重くなり」なんて事象は再現できませんでした。