gpt4 book ai didi

objective-c - 通过循环创建一个同名的新实例

转载 作者:行者123 更新时间:2023-12-02 21:41:27 27 4
gpt4 key购买 nike

作为 Objective C 的新手,我无法真正理解为什么这样可以:

@autoreleasepool {
for (int i = 0; i<10; i++) {
NSNumber *newNumber = [[NSNumber alloc] initWithInt:(i)];
NSLog(@"New number = %@", newNumber);
}
}
return 0;

但不是这个:

@autoreleasepool {
NSNumber *newNumber = [[NSNumber alloc] initWithInt:(0)];
NSLog(@"New number = %@", newNumber);

NSNumber *newNumber = [[NSNumber alloc] initWithInt:(1)];
NSLog(@"New number = %@", newNumber);
}
return 0;

在这两种情况下,我都重新定义了 *newNumber (?) 为什么会不同?

最佳答案

变量名称在给定范围内必须是唯一的。

范围由大括号{}定义。变量仅在定义它们的范围内(以及该范围内的范围)有效。

如果你有一个像这样的循环

for (int i = 0; i < 10; i++) {
NSNumber *newNumber = [[NSNumber alloc] initWithInt:(i)];
NSLog(@"New number = %@", newNumber);
}

newNumber 仅在 for 循环内部可用(在 {} 之间)。每次迭代后它都会“消失”。

如果您有这样的范围

@autoreleasepool {
NSNumber *newNumber = [[NSNumber alloc] initWithInt:(0)];
NSLog(@"New number = %@", newNumber);

NSNumber *newNumber = [[NSNumber alloc] initWithInt:(1)];
NSLog(@"New number = %@", newNumber);
}

两个 newNumber 变量都在同一范围内,因此唯一。

关于objective-c - 通过循环创建一个同名的新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20362953/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com