2012-02-23 11 views
0

私は何かについて混乱しています。だから私は@synthesizeとは何かsomeProp = _somePropはサブクラスで行います

self.someProp = someObject; 

のようなものをやってのメモリ管理部分を理解しかし、あなたは

@synthesize someProp = _someProp; 

として何かを宣言し、あなたがオブジェクトのサブクラスで_somePropにアクセスしようとすると、私はエラーsayintを取得しています_somePropは宣言されていません。しかし、もし私がself.someProp私は 'エラーを取得しないでください。誰かがこのシナリオの違いを説明できますか?ありがとう。これは基本的に次のコードを作成し

答えて

3

@implementation myClass 
{ 
    @private 
    id _someProp; // notice it's a private implementation property 
} 

-(id) someProp 
{ 
    return _someProp; 
} 

-(void) setSomeProp:(id) prop 
{ 
    [_someProp release]; 
    _someProp = [prop retain]; 
} 

@end 

をプライベート実装プロパティは、クラスの外部からアクセスすることができないことを意味し、インターフェースの一部が、実装の一部ではありません。

+0

インターフェイスに_somePropの宣言されたivarがある場合、これはサブインターフェイスで使用できるようになりました。 Thx –

+0

@JWはい、iVarをプライベートとして宣言しないと仮定します。 –

1

@synthesize someProp = _someProp;は、クラスにゲッターとセッターのメソッドを作成します。方法はsomePropsetSomePropと命名されています。これらのメソッドは、_somePropという名前のプライベート変数を取得して設定します。これは、その名前がサブクラスで使用できない理由です。

関連する問題