みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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ではクラス変数は存在しないとどっかのサイトに書いていました。

以上が質問です。なにかお気づきになった点があればごかいとういただけると幸いです。

投稿日時 - 2012-04-22 08:38:01

QNo.7434481

すぐに回答ほしいです

質問者が選んだベストアンサー

i はグローバル変数として宣言されています。

一度目の init 呼び出しのとき i はNULL(Objective-C的にはnil)ですが、
二度目では 一度目の NSLog のあとで i へ 123 が代入されていますので、
出力結果は 123 となります。

投稿日時 - 2012-04-22 16:00:53

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問