ios - setting property in dispatch_async but property is NULL after block finishes -
i using following code change property called topplaces inside view controller. line [flickrfetcher topplaces] returns nsarray , property topplaces is, of course, nsarray. dispatch_queue_t downloadqueue = dispatch_queue_create("flickr topplace", null); dispatch_async(downloadqueue, ^{ nsarray *topplaces = [flickrfetcher topplaces]; dispatch_async(dispatch_get_main_queue(), ^{ self.topplaces = topplaces; }); }); dispatch_release(downloadqueue); however, after block finishes executing, if log value of self.topplaces , still null reason. there missing? your ivar not set until after current method has finished. call [flickrfetcher topplaces] running in parallel current method , takes random amount of time complete. when complete, makes call main thread, executed on next iteration of run loop this means in second dispatch_async() block need call methods display data after setting ivar.