Переменная, возвращающая ноль после выполнения блока

Я отправляю очередь для загрузки некоторых фотографий flickr в отдельном потоке (в viewWillAppear). Когда я регистрирую содержимое массива внутри блока, он показывает все отлично:

    dispatch_queue_t photoDowonload=dispatch_queue_create("photoDownload", NULL);
dispatch_async(photoDowonload, ^{

    NSArray *photoList=[FlickrFetcher topPlaces]; //downloads flickr data
    self.listOfCities=photoList;
    NSLog(@"inside block: %@", self.listOfCities); //shows contents

});

но когда я пытаюсь записать массив, который был установлен внутри блока за пределами блока, он возвращает ноль.

    dispatch_queue_t photoDowonload=dispatch_queue_create("photoDownload", NULL);
dispatch_async(photoDowonload, ^{

    NSArray *photoList=[FlickrFetcher topPlaces];
    self.listOfCities=photoList;

});

    NSLog(@"after block: %@", self.listOfCities); //returns null

Какие'проблема здесь? self.listOfCities устанавливается как свойство NSArray, поэтому как толькоs установлен в блоке, он должен быть доступен за его пределами.

Ответы на вопрос(3)

Хорошо, я понял это. Моей целью было обновить tableView с информацией, возвращаемой блоком.

Выполнение блока изменяло переменную массива, но это изменение не показывалось.

Хитрость заключалась в том, чтобы обнаружить это изменение в геттере для массива следующим образом:

-(void) setListOfCities:(NSArray *)listOfCities
{
    if (_listOfCities!=listOfCities)
    {
        _listOfCities=listOfCities;
        [self.tableView reloadData]; //
Решение Вопроса

Код в блоке выполняется асинхронно. Таким образом, код после блока запускается до того, как у кода в блоке была возможность выполнить (или, конечно, по крайней мере завершить) .I '

Я только начал изучать Objective-C, и я могу быть слепым к некоторым проблемам, но яМне интересно, каково влияние _dispatch_asynch_ на выполнение блока кода, показанного выше. Документы говорят

Функции dispatch_async () и dispatch_sync () планируют блоки для одновременного выполнения в рамках диспетчеризации.

Возможно NSLog вызывается перед выполнением блока кода, а переменная еще не инициализирована.

@rmaddy Ты был быстрее.

Ваш ответ на вопрос