can you explain the difference between performSelectorOnMainThread and dispatch_async(dispatch_get_main_queue(), ^{}); ?