次の Objective-C コードを検討してください。
@interface ClassA : NSObject {
}
-(void) printVal;
@end
@implementation ClassA
-(void) printVal {
int val;
NSLog(@"%i", val);
}
@end
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
ClassA* cA = [[ClassA alloc] init];
[cA printVal];
[cA printVal];
[cA printVal];
[pool drain];
return 0;
}
この出力はなぜですか:
2012-11-29 22:12:06.586 TestOne[20266:903] 0
2012-11-29 22:12:06.587 TestOne[20266:903] 32767
2012-11-29 22:12:06.588 TestOne[20266:903] 32767
言い換えると、val
再宣言されたときに が 0 に再初期化されないのはなぜ32767
ですか? また、その後メソッドが呼び出されるたびに値を受け取るのはなぜですか?