@propertyと@synthesize

3114 ワード

@property @synthesize

どちらもコンパイラ命令で、コンパイラ命令はコンパイラに何をするかを教えるために使用されます.@propertyの歴史には2つの段階がある:第1の段階はXcode 4である.Xの前後以前、@propertyはsetter/getterメソッドの宣言しか生成できませんでした:フォーマット:
 @property int age;

setter/getterメソッドの宣言が生成されます.
-(void)setAge:(int)age; -(int)age;

@synthesizeはsetter/getterメソッドの実装を生成します:フォーマット:
@synthesize age = _age;

setterメソッド宣言:
-(void)setAge:(int)age
 {
_age = age;
 }
 ```

//getter :

-(int)age
 {
return _age;
 }

@propertyはコンパイラに何をするか教えてくれますか?1.@propertyは、宣言でコンパイラにメンバー変数を宣言するアクセサ(setter/getter)メソッドを教える.2.このようなメリットは、setterメソッドとgetterメソッドの煩雑なコードを手書きで書くことを免れることです.
@synthesizeの注意点:
@synthesize age = _age;

setterメソッドとgetterメソッドの実装では、メンバー変数にアクセスします.age,メンバー変数_ageが存在しない場合、@privateのメンバー変数が自動的に生成されます.age;
@synthesize age; setterメソッドとgetterメソッドの実装では@synthesizeの後の同名メンバー変数ageにアクセスし、ageが存在しない場合、@privateのメンバー変数ageが自動的に生成されます.
複数のプロパティは、コンマリンクを使用して1行@synthesizeで作成できます.
@synthesize age = _age, number = _number, name =_name;
<———————— ———————— ————————— ———————> Xcode 4から.Xの後、@propertyはsetterとgetterの宣言と実装を同時に生成することができる.
@property int age;

デフォルトでは、setterメソッドとgetterメソッドの実装では、下線の先頭のメンバー変数(例えば_age)にアクセスし、そうでない場合は先頭のメンバー変数が自動的に生成する、自動的に生成されるメンバー変数はプライベート変数であると宣言する.mでは、他のファイルでは表示できませんが、このクラスでは表示できます.@propertyは簡単なsetter/getterメソッドしか生成されず、データ判断は行われません.データ判断が必要な場合はgetter/setterメソッドを書き換える必要があります.1.setterメソッドを手動で書き換えると、コンパイラはgetterメソッドを自動的に生成するだけです.2.getterメソッドを手動で生成すると、コンパイラはsetterメソッドを自動的に生成するだけです.3.setterメソッドとgetterメソッドを同時に書き換えると、コンパイラは存在しないメンバー変数を自動的に生成する.
注記:ここで、@property int ageがある場合.もう書く必要はありませんageのようなメンバー変数は、コンパイラが自動的に生成する.mのプライベートメンバー変数_age.
@property :
@property int age;// ;
@property (readonly) int age;// setter getter ;( )
@property (readwrite) int age;// setter getter ;
@property (getter = isGood) BOOL good;// BOOL getter is ;

(getter=isGood)がない場合、呼び出し効果は次のとおりです.
[person good];

現在の呼び出し効果は[person isGood];
[person isGood]