そもそもは
インスタンス変数はクラス定義の.hファイル内の@interfaceから始まるコンパイラディレクティブ内の{}の中に記述する、とういうのが基本でした。が、Objective-C2.0からコンパイラがclang(詳細についてはエントリ末尾の参考サイト参照)になって賢くなった、ということらしく、プロパティで変数が宣言されていれば自動生成させるだけでOK、ということになったそうです。なので、これまではインスタンス変数を宣言しつつ、プロパティでももう一回インスタンス変数についてのプロパティ宣言をしていたのですが、{}内の記述は消しちゃってもいい、といよりもむしろ{}ごと消しちゃいなさい、ということみたいです。具体的には下記みたいな感じです。
これまでは
@interface hogehoge : NSObject { NSString *str1 ; //インスタンス変数str1を定義 NSString *str2; //インスタンス変数str2を定義 } @property (nonatomic) NSString *str1; //str1のプロパティ宣言 @property (nonatomic) NSString *str2; //str2のプロパティ宣言 @end
Objective-C2.0以降は
@interface hogehoge : NSObject @property (nonatomic) NSString *str1; //str1のプロパティ宣言 @property (nonatomic) NSString *str2; //str2のプロパティ宣言 @endすっきり!
また、上にも書きましたが、基本的にプロパティ宣言で済んでしまった場合は{}も消しましょう、ということみたいです。 iOS Developer Libraryの「Objective-C プログラミング言語」ファイルのP.35にも下記のように書いてあります。
歴史的には、インターフェイスにはクラスのインスタンス変数宣言が必要でした。(中略)インスタンス変数は実装詳細であり、通常、クラス自身の外からアクセスされることはありません。さらに、実装ブロック内に宣言すること、あるいは宣言済みプロパティから自動生成させることも可能です。したがって通常は、インスタンス変数宣言をパブリックインターフェイスで行うべきではないので、波括弧も省略してください。プロパティ宣言が必要ないインスタンス変数を定義したい場合にはヘッダファイル(.hファイル)に書くのではなくて、実装ファイル(.mファイル)内の@implementation内に{}を追加してその中に記述するのが今風(?)みたいですw
参考サイト
イマドキっ子の Objective-C | cockscomb.infoObjective-C入門その7:アクセサメソッドをマスターする|サルにもできるiPhoneアプリの作り方
Clang - Wikipedia
0 件のコメント:
コメントを投稿