美文网首页
线程间通讯

线程间通讯

作者: VickyLanLan | 来源:发表于2016-05-20 20:01 被阅读75次

                      线程间通讯

    线程间通信的体现:1个线程传递数据给另1个线程 ,在1个线程中执行完特定任务后,转到另1个线程继续执行任务。

    例子:

    1、定义属性

    /// 根视图是滚动视图

    @property (nonatomic, strong) UIScrollView *scrollView;

    /// 图像视图

    @property (nonatomic, weak) UIImageView *imageView;

    /// 网络下载的图像

    @property (nonatomic, weak) UIImage *image;

    2、loadView 方法

    Ø 加载视图层次结构

    Ø 用纯代码开发应用程序时使用

    Ø 功能和 Storyboard & XIB 是等价的

    - (void)loadView {

    _scrollView = [[UIScrollView alloc] init];

    _scrollView.backgroundColor = [UIColor orangeColor];

    self.view = _scrollView;

    UIImageView *iv = [[UIImageView alloc] init];

    [self.view addSubview:iv];

    _imageView = iv;

    }

    3、viewDidLoad 方法

    Ø 视图加载完成后执行

    Ø 可以做一些数据初始化的工作

    Ø 如果用纯代码开发,不要在此方法中设置界面 UI

    - (void)viewDidLoad {

    [super viewDidLoad];

    // 下载图像

    [self downloadImage];

    }

    4、下载网络图片

    - (void)downloadImage{

    // 1. 网络图片资源路径

    NSURL *url = [NSURL URLWithString:@"http://c.hiphotos.baidu.com/image/pic/item/4afbfbedab64034f42b14da1aec379310a551d1c.jpg"];

    // 2. 从网络资源路径实例化二进制数据(网络访问)

    NSData *data = [NSData dataWithContentsOfURL:url];

    // 3. 将二进制数据转换成图像

    UIImage *image = [UIImage imageWithData:data];

    // 4. 设置图像

    self.image = image;

    }

    5、设置图片

    - (void)setImage:(UIImage *)image {

    // 1. 设置图像视图的图像

    self.imageView.image = image;

    // 2. 按照图像大小设置图像视图的大小

    [self.imageView sizeToFit];

    // 3. 设置滚动视图的 contentSize

    self.scrollView.contentSize = image.size;

    }

    6、设置滚动视图的缩放

    Ø 设置滚动视图缩放属性

    // 1> 最小缩放比例

    self.scrollView.minimumZoomScale = 0.5;

    // 2> 最大缩放比例

    self.scrollView.maximumZoomScale = 2.0;

    // 3> 设置代理

    self.scrollView.delegate = self;

    Ø 实现代理方法 - 告诉滚动视图缩放哪一个视图

    #pragma mark - UIScrollViewDelegate 代理方法

    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {

    return self.imageView;

    }

    7、线程间通讯

    Ø 在后台线程下载图像

    [self performSelectorInBackground:@selector(downloadImage) withObject:nil];

    Ø 在主线程设置图像

    // waitUntilDone:是否等待主线程执行完毕 setImage:方法。

    // YES:等待  NO:不等待

    // 一般不用等待,直接设置 NO 即可

    [self performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO];

    相关文章

      网友评论

          本文标题:线程间通讯

          本文链接:https://www.haomeiwen.com/subject/dyggrttx.html