标签:
NSThread的创建子线程的三种方法:
1. //创建子线程
[self performSelectorInBackground:@selector(beginThread1) withObject:nil];
2.//创建子线程
[NSThread detachNewThreadSelector:@selector(beginThread2) toTarget:self withObject:nil];
3.第三种创建线程的方式和上面两种的区别:有返回值(当前子线程的对象),需要手动去开启线程
//创建子线程
NSThread *thread3 = [[NSThread alloc] initWithTarget:self selector:@selector(beginThread3) object:nil];
//设置线程3的名称
thread3.name = @"thread3";
//开启线程
[thread3 start];
线程之间的通讯: 可以在一个子线程中给另一个子线程发送指令
//仅仅只是发送指令, 具体线程5结束与否还是得由线程5自己决定
[thread5 cancel];
接收指令的线程判断是否接收到指令,然后决定是否退出:
//如果当前线程的cancel状态为YES(被其他线程取消了)
if ([[NSThread currentThread] isCancelled]) {
NSLog(@"线程5 退出");
//退出当前线程
[NSThread exit];
}
线程加锁:
//线程锁
NSLock *lock;
-(void)beginThread6
{
for (int i=0; i<20; i++) {
[lock lock]; //加锁
//sum减1
sum--;
NSLog(@"线程6 sum=%d", sum);
//暂停1秒
[NSThread sleepForTimeInterval:1];
[lock unlock]; //解锁
}
}
线程刷新UI必须回到主线程:
//必须回到主线程刷新UI(改变progressView的进度值progress)
//waitUntilDone:是否等待回到主线程的方法执行完成
[self performSelectorOnMainThread:@selector(onMainThread:) withObject:@(i) waitUntilDone:YES];
-(void)onMainThread:(NSNumber *)i
{ //在主线程改变进度条的值
[progressView setProgress:[i floatValue] * .1 animated:YES];
}
标签:
原文地址:http://my.oschina.net/u/2448151/blog/522266