2012-01-24 83 views
0

我不明白爲什麼B類可以訪問A類私有實例變量。 這裏是我的代碼訪問父類的私有實例變量

A.H

#import <Foundation/Foundation.h> 

@interface A : NSObject 
{ 

@private 
    int x; 
} 

@property int x; 

-(void)printX; 
@end 

時三十分

#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]; 

在這裏我可以訪問A類x的實例變量,儘管它被聲明爲私有?

回答

1

您沒有在那裏訪問私有變量,至少不是直接訪問:您正在訪問一個公共屬性,該私有變量可以合法訪問私有ivar。

你的代碼是相同的:

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

@synthesize語句創建的getter和你的setter方法。如果你想只有一個吸氣劑可用,標記你的財產readonly,並通過在A類的伊娃做所有的着作。

-1

在實現文件中做到這一點的頂部..

@interface A : NSObject 
{ 

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

這樣x將是私人的,因爲它是在實現文件。不是接口部分...所有的類都會導入A ..的接口部分,所以它的變量可以被其子類訪問。