Objective-Cクラス変数インスタンス変数
現在iPhoneアプリを作成するために、Objective-Cの勉強をしています。しかしそこでわからないことがあり、質問させていただきました。
それは私がインスタンス変数(メンバ変数)を宣言してつかっているつもりなのですが、クラス変数の様な動きをするのです。
具体的にコードで説明します。
@implementation Main : NSObject
- (void)hello{
[[Hoge alloc]init];
[[Hoge alloc]init];
}
@end
@implementation Hoge : NSObject
NSNumber *i;
- (id)init{
[super init];
NSLog(@"%d",i.intvalue);
i = [NSNumber numberWithInt:123];
return self;
}
@end
出力結果
null
123
今手元にソースがないので正確ではないかもしれませんが、こんな感じです。hファイルにはとくになにもかいてません。
このソースの動きはmainでHogeクラスのインスタンスを二回作成することによって、initを二回呼んでいます。
疑問点は出力結果の挙動が予想外なことです。私としてはインスタンス作成時のiは初期化されていないため、
出力結果
null
null
になるのを期待しています。しかし二回目のinitでは前回に作成した123というデータが引き継がれています。この挙動はiはインスタンス変数ではなく、クラス変数のようにみえます。
しかしObjective-Cではクラス変数は存在しないとどっかのサイトに書いていました。
以上が質問です。なにかお気づきになった点があればごかいとういただけると幸いです。
補足
ご回答ありがとうございます。 教えていただいた変数は、インスタンス化されたオブジェクトからは参照不可とのことですが、 各オブジェクトから参照・共有できる変数ってないのでしょうか? オブジェクト指向自体が良く分かっていないので、変な質問かもしれません。ご容赦ください。