2012-01-24 23 views
0

クラスBがクラスAプライベートインスタンス変数にアクセスできる理由を理解できません。 はここに私のコードです親クラスのプライベートインスタンス変数にアクセス

A.h

#import <Foundation/Foundation.h> 

@interface A : NSObject 
{ 

@private 
    int x; 
} 

@property int x; 

-(void)printX; 
@end 

A.M

#import "A.h" 

@implementation A 
@synthesize x; 

-(void)printX 
{ 
    NSLog(@"%i", x); 
} 

@end 

B.h

#import "A.h" 

    @interface B : A 
    { 

    } 

    @end 

main.m

B *tr = [[B alloc] init]; 
    tr.x = 10; 
    [tr printX]; 

プライベートとして宣言されていますが、クラスxのインスタンス変数にアクセスできますか?あなたの実装ファイルで

答えて

1

あなたはプライベート変数にアクセスしていません。少なくとも直接的にはそうではありません。あなたはプライベートivarへの正当なアクセス権を持つパブリックプロパティにアクセスしています。

あなたのコードは、これに相当します

B *tr = [[B alloc] init]; 
[tr setX:10]; 
[tr printX]; 

@synthesize文はあなたのためのgetterメソッドとsetterメソッドを作成しました。ゲッターだけを利用できるようにするには、プロパティーreadonlyに印を付け、Aクラスのすべての文章をivarで行います。

-1

がトップでこれを行う。..

@interface A : NSObject 
{ 

@private 
    int x; 
} 
@property int x; 
@end 

この方法、それは実装ファイルであるので、xはプライベートになります。インターフェイスセクションではなく...すべてのクラスはAのインターフェイスセクションをインポートします。その変数はそのサブクラスにアクセス可能です。

関連する問題