有时候我们会在开发过程中发现某个控件出现更新不及时问题,如:某个Button明明设置了frame但是其位置和尺寸并没有改变需要点击一下的时候才会更新,又或者一个Label已经设置了一个新的text,但是内容还是旧的等等这类的现象。起初以为是因为自己没有调用setNeedDisplay或者setNeedLayout方法导致更新不及时。后来才发现是因为UI的操作没有在主线程调用所导致的问题。
因此,如果在某个方法中存在UI操作,如果没有把握认定这个操作是在主线程中执行的话,那么可以通过GCD在方法中指定UI操作分发到主线程中执行。如:
- (void)setText:(NSString *)text forTextField:(UITextField *)textField { //其它操作 textField.text = text; //其它操作 }
改为下面的形式
- (void)setText:(NSString *)text forTextField:(UITextField *)textField { //其它操作 dispatch_async(dispatch_get_main_queue(), ^{ textField.text = text; }); //其它操作 }
时间: 2024-11-24 12:58:31