swift3&OSX格闘記・第2回「配列を渡すとインスタンスがコピーされた」

Author:

C言語からプログラムに入ってきた自分としては、ポインタ的概念はよく知っているわけで。
javascriptで

var a = [1, 2, 3];
var b = a;
b[1] = 4;
console.log(a)

こうするとa[1]も4になりますが、特におかしいと思わないです。
ポインタ渡しをしているだけので。

しかし、swiftで同じことやると変数aは変わりません。
phpみたいに変数コピーをしているのです。
で、これがどんな問題になるかというとメモリ使用量がばかすか増えるのです。

phpはwebページを開くだけでセッションは終わるけど、swiftはアプリが起動中ずっとメモリ使用するので危険ですなあ。
メモリ解放をしっかりしないとえらいこっちゃになるかもしれません。
そして場合によってはパフォーマンスに影響出るかもしれません。

必要な時にコピー処理を行う、らしいけどそれがいつかぱっと見分からないのは怖いですし。
ガーベジのようにメモリ解放したとしても、for文とかでぐるぐる回している最中じゃそうもいかず。

どっちも触ったことある自分としてはどっちの仕様でも良いのですが、個人的にはイコールは参照渡し、中身を渡したいのなら明示的にarray.copyみたいなメソッドを使うってのがしっくり来るのですよね。

まあとりあえず、swiftはコピーってのを忘れないように。

はじめに
第1回「ぐぐって出てくるのはどれもこれもiOS」
第2回「配列を渡すとインスタンスがコピーされた」
第3回「初期化しないメンバ変数なんて許しません」
第4回「NSStringとString、NSURLとUrl」
第5回「for文が、++が、、、」
第6回「ビルドおもーい」
第7回「do、try、catch」
第8回「swift2では動くのにswift3では動かない」
第9回「ふおおWindowsFormみたい」
第10回「Labelの値を変える」
第11回「windowControllerとViewControllerとView」
第12回「ボタンはViewController、メニューはDelegate」
第13回「TreeViewのしんどさ」
第14回「¥nマークは改行しません」
第15回「instantiateじゃ駄目ぇ」
第16回「ScrollViewの中にTextView」
第17回「ファイルをどう読み書きすればいいんじゃ」
第18回「右クリック・・・」
第19回「isIntなんて無いです」
第20回「anyはswitchでキャスト」
第21回「MessageBox.Show」
第22回「BezierはViewの中で」
第23回「512pxのアイコンを用意せよ」
第24回「アーカイブ作成」
第25回「これから始める人へ」

Facebook にシェア
Pocket