例を通してプライベートインスタンス変数を理解するのに苦労しています。プライベート インスタンス変数について読んだ後、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 is equal to 100
"x" はプライベート インスタンス変数であり、"b" はサブクラスであるのに対し、"x" はスーパークラス "a" の実装ファイルで宣言されているため、オブジェクト "b" からアクセスできませんか?
本には、「サブクラスによって直接アクセスされるインスタンス変数は、実装セクションではなく、インターフェースセクションで宣言する必要があります...実装セクションで宣言または合成されたインスタンス変数はプライベートインスタンス変数であり、サブクラス。」
これには本当に困惑。