我很难通过示例来理解私有实例变量。在阅读了私有实例变量之后,我去了 Xcode 并尝试验证它们是如何工作的。
在我正在阅读的书中,它指出如果您在超类的实现文件中声明一个实例变量,则该实例变量将是私有的,子类无法访问。
我尝试证明它在没有任何运气的情况下执行以下操作。
/** SuperClass interface file**/
#import <Foundation/Foundation.h>
@interface ClassA : NSObject
-(void) setX;
-(void) printX;
@end
/**SuperClass implementation file **/
#import "ClassA.h"
@implementation ClassA
{
int x;
}
-(void) setX
{
x = 100;
}
-(void) printX
{
NSLog(@" x is equal to %i", x);
}
@end
/** interface file of subclass **/
#import "ClassA.h"
@interface ClassB : ClassA
@end
/**Main file **/
#import "ClassA.h"
#import "ClassB.h"
int main(int argc, const char * argv[])
{
@autoreleasepool
{
ClassA * a;
a = [[ClassA alloc] init];
ClassB * b;
b = [[ClassB alloc] init];
[b setX];
[b printX];
}
return 0;
}
程序打印以下内容: x 等于 100
“x”不是私有实例变量并且对象“b”不能访问,因为“x”是在超类“a”的实现文件中声明的,而“b”是一个子类?
书中说“子类直接访问的实例变量必须在接口部分而不是在实现部分中声明......在实现部分中声明或合成的实例变量是私有实例变量,不能直接访问子类。”
真的被这个弄糊涂了。