Невозможно понять лексическую область видимости блока

Чтобы понять лексическую область видимости блока, я написал следующий код

typedef int (^ MyBlock)(void);

MyBlock b[3];

for (int i=0; i<3; i++) {
    b[i]=^{return i;};
}

for (int i=0; i<3; i++) {
    NSLog(@"%d",b[i]());
}

NSLog(@"----------------------------");

int j=0;

b[0]=^{return j;};  
j++;

b[1]=^{return j;};
j++;

b[2]=^{return j;};

for (int i=0; i<3; i++) {
    NSLog(@"%d",b[i]());
}
  1. , первый раз o / p равно 2,2,2
  2. второй раз o / p равно 0,1,2

Я ожидаю 2,2,2 для выполнения обоих блоков.

Кто-нибудь, пожалуйста, объясните мне, почему это так?

6
задан Abhijeet 11 July 2011 в 09:15
поделиться