Блоки, циклы и локальные переменные

Рассмотрим следующий фрагмент кода:

for(/* some condition */) {
   int x = rand();
   [array addObject:^(){
       NSLog(@"%d", x);
   }]
}

for(void (^block)() in array) {
    block();
}

Теперь я ожидаю, что этот фрагмент кода выведет все значения, присвоенные x в этом цикле for; однако кажется, что все блоки используют одну и ту же переменную 'x' (предположительно последнюю).

Есть идеи, почему это так и как я могу исправить код, чтобы каждый блок содержал переменную 'x' в том виде, в котором она была в момент определения блока?

6
задан Mihai Damian 13 October 2011 в 07:49
поделиться