您的位置:首页 > 移动开发 > IOS开发

iOS 开发 多线程详解之NSThread线程通信的操作与控制

2016-11-24 00:08 603 查看
线程间通信

线程在运行过程中,可能需要与其它线程进行通信。我们可以使用 NSObject 中的一些方法: 在应用程序主线程中做事情:

performSelectorOnMainThread:withObject:waitUntilDone:

performSelectorOnMainThread:withObject:waitUntilDone:modes:


在指定线程中做事情:

performSelector:onThread:withObject:waitUntilDone:

performSelector:onThread:withObject:waitUntilDone:modes:


在当前线程中做事情:

performSelector:withObject:afterDelay:

performSelector:withObject:afterDelay:inModes:


取消发送给当前线程的某个消息

cancelPreviousPerformRequestsWithTarget:

cancelPreviousPerformRequestsWithTarget:selector:object:


线程间通信

NSThread线程键通信

- (void)viewDidLoad {
[super viewDidLoad];
[self setUpUI];

// 开启新线程异步下载图片
[self performSelectorInBackground:@selector(downloadImageData) withObject:nil];
}


- (void)downloadImageData
{
// 图片资源地址

// 回到主线程更新UI
// waitUntilDone:是否等待主线程执行结束再执行"下一行代码",一般设置成NO,不用等待
[self performSelectorOnMainThread:@selector(setupImageViewWithImage:) withObject:image waitUntilDone:NO];

// 测试 waitUntilDone:
NSLog(@"下一行代码");
}


GCD线程键通信

/// 线程间通信
- (void)gcdDemo3
{
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSLog(@"下载中... %@",[NSThread currentThread]);

dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"下载完成 %@",[NSThread currentThread]);
});
});
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: