Почему __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];
Это работает нормально.
Однако когда я объявил массив как свойство, блок стал избыточным.