1

次のクラスがあるとします。

@interface MyObj : NSObject{
   int age;   
}

-(void) setAge: (int) anAge;
-(int) returnAge;
@end

@implementation MyObj

-(void) setAge:(int) anAge{
  age = anAge;
}

-(int) returnAge{
  return age;
}

次に age 変数に値を割り当てたい場合は、クラス メソッドを使用して main で次のことを行うことができます。

MyObj *newObj = [MyObj new];
[newObj setAge:18];

しかし、いじってみると、 を使用して ivar に直接アクセスできるように見えることに気づきました。表記。これで警告やエラーは発生しません。

MyObj *newObj = [MyObj new];
newObj.age = 20;

最終結果はどちらも同じように見えますが、. このように ivar に直接アクセスするための表記法。

すべての ivar に対してゲッターとセッターを使用する必要がありますか、それともこのように直接アクセスしていますか?

ありがとう

4

1 に答える 1

0

個人的には、インスタンス変数を宣言して直接アクセスすることは避けています。代わりに、@propertyステートメントを使用してプロパティを宣言するだけです。最近の Objective-C コンパイラは、所属するインスタンス変数を自動的に導入します (自動合成)。また、そのようなプロパティを読み取り専用または書き込み専用として宣言しない限り、getter と setter が自動的に追加されます。

プロパティを使用して、実装する場合を除いて、インスタンス変数に直接アクセスすることはありません。

  • initそれらを含むクラスのメソッド
  • ゲッター/セッターを上書きして新しい値を取得/保存するとき
  • deallocメソッド

self.propertyName他のすべての場所では、表記法を使用してプロパティを参照するだけです。これにより、プロパティの get および set メソッドが暗黙的に呼び出されます。これには、既存のコードを変更することなく、後で get および set メソッドを導入できるという利点があります。

Objective-C の優れたコード スタイルについて詳しく説明している優れたスタイル ガイドがいくつかあります。

于 2014-09-01T10:32:54.963 に答える