質問: @"test"` でも表示されます。 これも意味は理解できます。 ただどういった状況でプロパティに宣言するか、インスタンス変数として宣言するか、使い道が理解出来ません。 だんだん迷ってどうすれば?って感じになってます。 どなたか教えて頂けないでしょうか。よろしくお願いします。 環境ですが、 OS X 10.9.5 Xcode6.1.1 です。
回答: ARC(Automatic Reference Counting)が有効かどうかで2パターンの回答が考えられます。まず、ARCが有効であると仮定します。 `@property`は、その記述とともに指定した名前をもつ**プロパティ**のsetter/getterの宣言(および、必要に応じてその実装も)を提供するシンタックスシュガーです。 (端折って言えば)プロパティ及びsetter/getterは、カプセル化を実現するためのコンセプト(抽象化手法)の一つです。それを利用するモチベーションは、作ろうとしているオブジェクトの外部仕様(インターフェイス) に「属性の集合からなる何か」というモデルを適用した上で、そのインターフェイスに属性値の読み書きの操作方法を提供するところからきています。 一方、**インスタンス変数**は、オブジェクトが望んだように機能するために、クラス製作者が機能を記述するために利用できる、インスタンスに対応した変数です。ただの入れ物です。基本的にはオブジェクトの中からしか参照/更新できませんし、そうなっていないとしたら、そのオブジェクトはオブジェクトなのにオブジェクトという形で抽象化しきれていないのでオブジェクトではありません。 なので、インスタンス変数は外部仕様を記述するヘッダー(.h)上の`@interface {}`内に記述するよりも、ソースコードファイル(.m, .mm)の`@implementation {}`に記述するのが好ましいです。`@property`は(基本的に)その逆です。 それぞれの特徴をまとめると、以下のようになると思います。使い分けるときに参考にしていただければと思います。 * プロパティ(=`@property`) + オブジェクトの外部仕様(インターフェイス)を表現するための表現方法(見せ方) + ヘッダーファイル(.h)で宣言されている * インスタンス変数 + オブジェクトの機能を記述するためのアルゴリズムに都合がいいように使う(入れ物) + ソースファイル(.m, .mm)の中からしか見えない(基本的には) ARCが無効な世界では、変数の代入によって自動的にオブジェクトがretain/releaseされないため、自前で管理しなくてはなりません。 `@property(retain)`にはプロパティへのset時に自動的にretain/releaseをしてくれるという機能があるので、普通のインスタンス変数を使うより楽できます。