LoginSignup
10
11

More than 5 years have passed since last update.

【iOS】構造体とクラスの違い

Last updated at Posted at 2015-06-15

構造体はプロパティもメソッドも定義できる。じゃあ、クラスと何が違うんだ!?

 決定的に違うのは、変数を入れるときクラスは参照渡しで、構造体は値渡しという点です。
- クラスは、参照渡しなのでアドレスを渡す
- 構造体は、コピーを渡す

その他の違い
· 構造体はクラスとは違って継承ができません。
· クラスのプロパティを宣言する場合は、宣言時に初期化するか、initメソッド内で初期化処理をかかないとエラーが起きる。一方、構造体はプロパティの宣言時に初期化しなくてもエラーは起きません。
· 型のキャストができない

構造体を使うパターン

· 小さくても単純なデータをカプセル化したい場合
· 参照渡しより値渡しがいい場合
· 継承が必要ない場合

構造体を避けた方がいいパターン

· データが大きい
· プロパティが多い

理由としては、以下の2つ
· 構造体は変数にセットする度にコピーされるため、データが大きいと処理時間が遅くなる
· 構造体はスタック領域に確保されるため、データが大きいと溢れる可能性が高くなる

結論としては、APIやDBの取得などは構造体ではなく、クラスで作成した方がよさそう

 
ちなみに、Swiftでのデータ型は構造体で作成されている
· String
· Array
· Dictionary
· Bool
· Int
· Double
· Float

などなど

なので、これらのものは変数に入れる度にコピーされています。

さいごに

本当は、構造体だけではなく列挙型もメソッドを定義できるのですが、今回は構造体に的をしぼって説明しました。

10
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11