考虑下面的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
?
这不是一个Objective-C问题。这是一个C问题。 Objective-C是C(通常被遗忘的事实)......考虑阅读K&R;这是一个很棒的阅读。 – matt
@matt,我想它可能是,但我更加不熟悉C,而不是Obj-C。在问题中添加了'c'标签。 – ericsoco