use GCD & performSelectorOnMainThread