zoukankan      html  css  js  c++  java
  • iOS开发多线程篇—线程间的通信

    iOS开发多线程篇—线程间的通信

     

    一、简单说明

    线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信

     

    线程间通信的体现

    1个线程传递数据给另1个线程

    在1个线程中执行完特定任务后,转到另1个线程继续执行任务

     

    线程间通信常用方法

    - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;

    - (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait;

     

    线程间通信示例 – 图片下载

    代码1:

    //
    //  YYViewController.m
    //  06-NSThread04-线程间通信
    //
    //  Created by apple on 14-6-23.
    //  Copyright (c) 2014年 itcase. All rights reserved.
    //
    
    #import "YYViewController.h"
    @interface YYViewController ()
    @property (weak, nonatomic) IBOutlet UIImageView *iconView;
    @end
    
    @implementation YYViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    }
    
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
    
    // 在子线程中调用download方法下载图片
        [self performSelectorInBackground:@selector(download) withObject:nil];
    }
    
     
    
    -(void)download
    {
        //1.根据URL下载图片
        //从网络中下载图片
        NSURL *urlstr=[NSURL URLWithString:@"fdsf"];
    
        //把图片转换为二进制的数据
        NSData *data=[NSData dataWithContentsOfURL:urlstr];//这一行操作会比较耗时
    
        //把数据转换成图片
        UIImage *image=[UIImage imageWithData:data];
     
        //2.回到主线程中设置图片
        [self performSelectorOnMainThread:@selector(settingImage:) withObject:image waitUntilDone:NO];
    }
    
     
    
    //设置显示图片
    -(void)settingImage:(UIImage *)image
    {
        self.iconView.image=image;
    }
    
    @end

    代码2:

    //
    //  YYViewController.m
    //  06-NSThread04-线程间通信
    //
    //  Created by apple on 14-6-23.
    //  Copyright (c) 2014年 itcase. All rights reserved.
    //
    
    #import "YYViewController.h"
    #import <NSData.h>
    
    @interface YYViewController ()
    @property (weak, nonatomic) IBOutlet UIImageView *iconView;
    @end
    
    @implementation YYViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    }
    
     
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
    // 在子线程中调用download方法下载图片
    
        [self performSelectorInBackground:@selector(download) withObject:nil];
    }
    
     
    -(void)download
    {
    
        //1.根据URL下载图片
        //从网络中下载图片
        NSURL *urlstr=[NSURL URLWithString:@"fdsf"];
    
        //把图片转换为二进制的数据
        NSData *data=[NSData dataWithContentsOfURL:urlstr];//这一行操作会比较耗时
    
        //把数据转换成图片
        UIImage *image=[UIImage imageWithData:data];
    
        //2.回到主线程中设置图片
        //第一种方式
    //    [self performSelectorOnMainThread:@selector(settingImage:) withObject:image waitUntilDone:NO];
    
        //第二种方式
        //    [self.imageView performSelector:@selector(setImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:NO];
    
        //第三种方式
       [self.iconView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO];
    }
    
    
    //设置显示图片
    //-(void)settingImage:(UIImage *)image
    //{
    //    self.iconView.image=image;
    //}
    
    @end
  • 相关阅读:
    jq-demo-阻止冒泡,阻止默认行为
    jq-demo-轮播图
    jq-demo-点击选择(英雄联盟)
    jq-demo-tab切换
    jq-demo-拖拽
    hdu 4031 Attack 线段树
    codeforces 633C. Spy Syndrome 2 hash
    sublime模式下开启vim并修改esc
    codevs 1256 打鼹鼠 LIS
    codevs 1455 路径 计算m^n%p
  • 原文地址:https://www.cnblogs.com/yipingios/p/5563424.html
Copyright © 2011-2022 走看看