iOS 多线程总结(一)
来源:互联网 发布:框架图制作软件 编辑:程序博客网 时间:2024/06/05 17:28
1.线程间的通信:
- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullableid)arg waitUntilDone:(BOOL)wait modes:(nullableNSArray<NSString *> *)arrayNS_AVAILABLE(10_5,2_0);
- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullableid)arg waitUntilDone:(BOOL)waitNS_AVAILABLE(10_5,2_0);
// equivalent to the first method with kCFRunLoopCommonModes
- (void)performSelectorInBackground:(SEL)aSelector withObject:(nullableid)arg NS_AVAILABLE(10_5,2_0);//后台运行。
2.简单的使用
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[selfperformSelectorInBackground:@selector(downloadImage)withObject:nil];
}
#pragma mark- 下载图片
- (void)downloadImage
{
// 子线程里面的runloop默认不开启,也就意味不会自动创建自动释放池, 子线程里面autorelease的对象就会没有池子可放。 也就意味后面没办法进行释放。造成内存泄露
// 所以需要手动创建
@autoreleasepool {
NSLog(@"%@", [NSThreadcurrentThread]);
// 1. url, 确定一个网络上的资源路径
NSURL *url = [NSURLURLWithString:@"http://h.hiphotos.baidu.com/image/pic/item/5366d0160924ab1828b7c95336fae6cd7b890b34.jpg"];
// 2. 通过url可以下载对应的网络资源,网络资源传输的都是二进制
NSData *data = [NSDatadataWithContentsOfURL:url];
// 3. 二进制转成图片
UIImage *image = [UIImageimageWithData:data];
// 4. 把图片显示到iconView
// self.iconView.image = image;
// 在这里需要把数据传到主线程,在主线程更新UI
// 1.
[selfperformSelectorOnMainThread:@selector(downloadFinish:)withObject:image waitUntilDone:NO];
//2. [self performSelector:@selector(downloadFinish:) onThread:[NSThread mainThread] withObject:image waitUntilDone:NO];
//3.
// [self.iconView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES];
// waitUntilDone:表示是否等待@selector(setImage:)方法执行完成
// 如果是YES,就等待setImage在其他线程执行结束,再往下执行
NSLog(@"完成!!");
}
}
- (void)downloadFinish:(UIImage *)image
{
NSLog(@"%s---%@",__func__, [NSThreadcurrentThread]);
self.iconView.image = image;
// [self.iconView setImage:image];
}
- iOS 多线程总结(一)
- 多线程总结(一)
- 总结iOS 多线程学习过程一
- iOS 多线程(一)多线程基础
- iOS多线程开发(一)
- iOS多线程开发(一)
- iOS 多线程(一)NSThread
- iOS 多线程开发(一)
- iOS 多线程(一)Pthread
- iOS 多线程开发(一)
- java多线程总结(一)
- python 多线程总结(一)
- java多线程总结 (一)
- java多线程总结(一)
- Java多线程总结(一)
- Java 多线程总结(一)
- java多线程总结(一)
- iOS多线程的初步研究(一)
- Java 线程协作 wait,notify,notifyAll,Sleep,Join,Condition
- POJ 1338(set, 最小优先队列的简单使用)
- 设计模式总览--Java版
- Android Studio 编译出现Your project path contains non-ASCII characters.
- OJ-----数字颠倒
- iOS 多线程总结(一)
- PHP中 获取文件扩展名的N种方法
- TCP编程与UDP编程的步骤:
- Yii2创建程序更新和写入的日志捕捉
- HDU4793 2013 长沙 C (计算几何—点和圆的位置关系—解法①列方程求解[时间作自变量] —解法②向量积和sin角度求解长度再除以有方向的速度)
- 平衡二叉树
- Squares
- shareSDK分享_登陆
- 案例:e袋洗如何以用户为导向的高性价比闭环