我无法弄清楚为什么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];
这里我可以访问A类x的实例变量,尽管它被声明为私有?
答案 0 :(得分:1)
您不是在那里访问私有变量,至少不是直接访问:您正在访问一个公共财产,它可以合法访问私有ivar。
您的代码与此相同:
B *tr = [[B alloc] init];
[tr setX:10];
[tr printX];
@synthesize
语句为您创建了getter和setter方法。如果您只想获得一个getter,请标记您的属性readonly
,并通过A
类中的ivar执行所有着作。
答案 1 :(得分:-1)
在您的实施文件中,请在顶部执行此操作..
@interface A : NSObject
{
@private
int x;
}
@property int x;
@end
这样,x将是私有的,因为它在实现文件中。不是接口部分...所有类都导入A的接口部分..所以它的变量可以被子类访问。