Почему __block не добавляет значения в массив

Я перечисляю диапазоны внутри блока и сохраняю значения внутри массива. Я ожидал, что с помощью __block следует хранить значения внутри блока в массиве?

 __block  NSMutableArray *array;
  [indexSet enumerateRangesUsingBlock:^(NSRange range,BOOL * stop ) {

    [array addObject:@(range.location)];
    [array addObject:@(range.length)];

     NSLog(@"location is %d, %ld", range.location, range.length);


}];


NSLog(@"%@",array );

Но этот результат в

Расположение 4, 2 Расположение 8, 2 Расположение 14, 2

и для массива

(ноль)

Я ожидал, что массив будет заполнен значениями.

2 ответа

Решение

Вы должны инициализировать его, только что объявленный массив nil:

__block  NSMutableArray *array = [NSMutableArray array];

(Компилятор Swift выдаст ошибку...)

__block NSMutableArray *array = [NSMutableArray array];

Это работает нормально.

Однако когда я объявил массив как свойство, блок стал избыточным.

Другие вопросы по тегам