IOS开发网络第一天之06线程之间的通信
2019獨角獸企業重金招聘Python工程師標準>>>
#import "ViewController.h"
@interface ViewController ()
//和storyBoard關聯
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@end
@implementation ViewController
- (void)viewDidLoad {
? ? [super viewDidLoad];
?? ?
?? ?
?? ?
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
?? ?
?? ?
? ? //創建一個子線程去下載圖片
? ? NSThread *thread = [[NSThread alloc]initWithTarget:self
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? selector:@selector(downLoadImageFromUrl:) object:@"http://yuting.local/shareX/1092.jpg"];
? ? [thread start];
?? ?
}
#pragma mark - 從網絡上下載圖片
- (void)downLoadImageFromUrl:(NSString *)path{
? ? NSLog(@"開始");
? ? //1.
? ? NSURL *url = [NSURL URLWithString:path];
? ? //2.下載圖片二進制
? ? NSData *data = [NSData dataWithContentsOfFile:url];
?? ?
? ? //3.轉換成圖片
? ? UIImage *image = [UIImage imageWithData:data];
?? ?
? ? //所有的UI操作(UI界面的搭建和UI界面的刷新和事件處理只能在
? ? //主線程中進行
? ? //原因1:主線程的只需效率更高,不容易出現界面的卡頓,可以讓界面更加流暢
? ? //2.UIKit框架下內部所有的屬性都是nonatomic修飾,不符合線程安全
? ? //如果多個線程訪問同一個控件就會造成線程安全問題
? ? //不能讓多個線程訪問同一個控件,所以約定所有控件的訪問都在主線程中;
?? ?
? ? //4.將圖片傳回主線程
? ? //參數1:返回主線程后調用的方法
? ? //參數2:傳回主線程中的對象,也是返回主線程后要調用的方法的實參
? ? //參數3:是否等待結束;(YES:showImage方法執行完后才執行后面的操作)
? ? //NO直接執行后面的操作
? ? [self performSelectorOnMainThread:@selector(showImage:) withObject: image waitUntilDone:NO];
? ?
? ? [self performSelector:@selector(showImage:) onThread:[NSThread mainThread] withObject:self waitUntilDone:NO modes:nil];
? ? NSLog(@"結束");
?? ?
?? ?
?? ?
?? ?
}
#pragma mark -?
- (void) showImage:(UIImage *)image{
?? ?
? ? _imageView.image = image;
}
@end
轉載于:https://my.oschina.net/luhoney/blog/666047
總結
以上是生活随笔為你收集整理的IOS开发网络第一天之06线程之间的通信的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CMDB经验分享之 – 剖析CMDB的设
- 下一篇: 实现动态顺序表