performSelectorOnMainThread和performSelectorInBackground详解
2016-12-20 12:03
651 查看
NSObject类的performSelectorOnMainThread和performSelectorInBackground可以实现简单的多线程编程技术
1、- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg
创建一个线程在子线程执行,aSelector代表了新创建的线程,arg是传入的参数
2、- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;
该方法的作用是在主线程中,执行制定的方法(代码块)。
参数:
@selector就是,要定义我们要执行的方法。
withObject:arg定义了,我们执行方法时,传入的参数对象。类型是id。(我们可以传入任何参数)
waitUntilDone:YES指定,当前线程是否要被阻塞,直到主线程将我们制定的代码块执行完。
注意:
1.当前线程为主线程的时候,waitUntilDone:YES参数无效。
2.该方法,没有返回值
3.该方法主要用来用主线程来修改页面UI的状态。
sample code:
执行结果:
2014-08-19 11:03:59.101 testApp[1848:3107] the thread is <NSThread: 0x8c504a0>{name = (null), num = 2}
2014-08-19 11:04:01.103 testApp[1848:60b] the main thread is <NSThread: 0x8c444c0>{name = (null), num = 1}
1、- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg
创建一个线程在子线程执行,aSelector代表了新创建的线程,arg是传入的参数
2、- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;
该方法的作用是在主线程中,执行制定的方法(代码块)。
参数:
@selector就是,要定义我们要执行的方法。
withObject:arg定义了,我们执行方法时,传入的参数对象。类型是id。(我们可以传入任何参数)
waitUntilDone:YES指定,当前线程是否要被阻塞,直到主线程将我们制定的代码块执行完。
注意:
1.当前线程为主线程的时候,waitUntilDone:YES参数无效。
2.该方法,没有返回值
3.该方法主要用来用主线程来修改页面UI的状态。
sample code:
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. _label=[[UILabel alloc] initWithFrame:CGRectMake(40, 40, 60, 40)]; _label.textColor=[UIColor redColor]; _label.text=@"123"; [self.view addSubview:_label]; [self performSelectorInBackground:@selector(backWork) withObject:nil]; } -(void)backWork { NSLog(@"the thread is %@",[NSThread currentThread]); sleep(2); [self performSelectorOnMainThread:@selector(mainWork) withObject:nil waitUntilDone:NO]; } -(void)mainWork { NSLog(@"the main thread is %@",[NSThread currentThread]); _label.text=@"456"; _label.textColor=[UIColor greenColor]; }
执行结果:
2014-08-19 11:03:59.101 testApp[1848:3107] the thread is <NSThread: 0x8c504a0>{name = (null), num = 2}
2014-08-19 11:04:01.103 testApp[1848:60b] the main thread is <NSThread: 0x8c444c0>{name = (null), num = 1}
</div>
相关文章推荐
- performSelectorOnMainThread
- performSelectorOnMainThread 和detachNewThreadSelector区别
- [iOS] performSelectorOnMainThread支持多个参数
- ios更新UI时请尝试使用performSelectorOnMainThread方法
- 多线程performSelectorOnMainThread
- iOS: 通过performSelectorOnMainThread在不同线程中更新界面
- [iOS] performSelectorOnMainThread支持多个参数
- performSelectorOnMainThread 和detachNewThreadSelector区别.
- performSelectorOnMainThread
- performSelectorOnMainThread支持多个参数
- performSelectorOnMainThread 和detachNewThreadSelector区别.
- 利用performSelectorInBackground和performSelectorOnMainThread实现多线程
- 多线程的使用(1)-performSelectorOnMainThread
- performSelectorOnMainThread
- performSelectorOnMainThread 和detachNewThreadSelector区别
- 回调 performSelectorOnMainThread:withObject:nil waitUntilDone:NO 当设置为yes事界面无法正常显示??
- NSOperation与performSelectorOnMainThread
- performSelectorOnMainThread
- 利用performSelectorInBackground和performSelectorOnMainThread实现多线程
- ios更新UI时请尝试使用performSelectorOnMainThread方法