【发布时间】:2012-11-18 08:48:35
【问题描述】:
考虑以下 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,我想可能是这样,但我对 C 的了解甚至比对 Obj-C 的了解还要多。在问题中添加了“c”标签。
标签: objective-c c initialization declaration default-value