※ ChatGPTを利用し、要約された質問です(原文:Objective-Cクラス変数インスタンス変数)
Objective-Cクラス変数インスタンス変数
このQ&Aのポイント
Objective-Cの勉強中に起きたインスタンス変数の挙動について質問です。
ソースコードの出力結果が予想と異なり、クラス変数のような挙動を示しています。
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ではクラス変数は存在しないとどっかのサイトに書いていました。
以上が質問です。なにかお気づきになった点があればごかいとういただけると幸いです。