为什么重复的objective-C对象可以在循环中声明,但不能按顺序声明?

为什么重复的objective-C对象可以在循环中声明,但不能按顺序声明?,objective-c,xcode,scope,Objective C,Xcode,Scope,我正在学习objective-C,我想知道为什么下面的代码会导致错误 Person *p = [[Person alloc] init]; Person *p = [[Person alloc] init]; 在这种情况下,第二行给出一个错误,说明“p”指针已经定义 这对我来说很有意义;但是,如果指针确实无法重新定义,那么为什么下面的代码可以工作 for(int i = 0; i<10; i+=1) { Person *p = [[Person alloc] init]; }

我正在学习objective-C,我想知道为什么下面的代码会导致错误

Person *p = [[Person alloc] init];
Person *p = [[Person alloc] init];
在这种情况下,第二行给出一个错误,说明“p”指针已经定义

这对我来说很有意义;但是,如果指针确实无法重新定义,那么为什么下面的代码可以工作

for(int i = 0; i<10; i+=1) {
    Person *p = [[Person alloc] init];
}
for(int i=0;i
在第一种情况下,两个
p
在相同的局部范围内,它们都是局部变量,因此它们具有相同的优先级。我们不能有两个具有相同名称和相同优先级的变量

Person *p = [[Person alloc] init];
{
    Person *p = [[Person alloc] init];
}
由于第二个
p
在其局部范围内的优先级高于第一个
p
,因此上述情况可以

for(int i = 0; i<10; i+=1) {
    Person *p = [[Person alloc] init];
}

用于(inti=0;i简而言之,这是因为在for循环的情况下,变量
p
是循环本身的局部变量,因此在每次迭代结束时
p
和仅循环作用域局部的任何其他变量都会被释放。

热舔…没有帮助!为什么对这个问题投反对票。很少有新用户发布dec这几天我不会质疑。这种行为应该得到奖励。这个问题很清楚,它有相关的代码。你还想要什么?回应@rmaddy:证明“新手”的问题误解并不是坏问题,只要它们被清楚地表达出来。这是一个写得很好的问题,显示出理解问题的努力。一个“只是在学习Objective-C”的人应该已经知道C或Java。以上不是Objective-C问题,而是一般编程知识问题。如果OP不知道这一点,他应该在尝试Objective-C之前回去学习更多。这不是初学者的语言。仅供参考-如果打开“隐藏的局部变量”,第二个示例可能会导致警告警告。@如果这个答案有帮助,请接受它并投票表决。这不是被释放的变量的问题。这是范围的问题。这只是变量范围的问题,而不是对象生存期的问题。@rmaddy正确,但我认为对象生存期与范围相切,值得一提。
for(int i = 0; i<10; i+=1) {
    Person *p = [[Person alloc] init];
}