dispatch_async(dispatch_get_main_queue(), ^{
       //do something in main_queue
    });

解决方案 »

  1.   

    image已经构造出来了,直接在1楼提供的GCD里取ImageView并给它赋值就好了:
    dispatch_async(dispatch_get_main_queue(), ^{
        imageView.image = MyImg;
    });
      

  2.   

    也可以[myImageView perforSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntiDone:NO];然后重写imageView的drawInRect , 在这函数里画
      

  3.   


    现在是这样我这里是这样的:UIImage *MyImg = [[UIImage alloc] initWithData: data ];在一个C语言写的全局的线程函数里面,
    在main.stotryboard里面拖了一个UIImageview控件。然后按住control,用鼠标拖动到ViewController头文件,
    ViewController.h里面  @property (strong, nonatomic) IBOutlet UIImageView *MyImageView;
    然后ViewController.m里面加上
    @synthesize MyImageView;
    然后在初始化的位置加上
      MyImageView = [[UIImageView alloc] initWithFrame:self.view.frame];
        MyImageView.center = self.view.center;
        [self.view addSubview:MyImageView];我想问dispatch_async(dispatch_get_main_queue(), ^{
        MyImageView.image = MyImg;
    });该写在什么地方呀?如果是写在全局的线程函数的里面,MyImageView又不是全局的呀?
      

  4.   


    现在是这样我这里是这样的:UIImage *MyImg = [[UIImage alloc] initWithData: data ];在一个C语言写的全局的线程函数里面,
    在main.stotryboard里面拖了一个UIImageview控件。然后按住control,用鼠标拖动到ViewController头文件,
    ViewController.h里面  @property (strong, nonatomic) IBOutlet UIImageView *MyImageView;
    然后ViewController.m里面加上
    @synthesize MyImageView;
    然后在初始化的位置加上
      MyImageView = [[UIImageView alloc] initWithFrame:self.view.frame];
        MyImageView.center = self.view.center;
        [self.view addSubview:MyImageView];我想问dispatch_async(dispatch_get_main_queue(), ^{
        MyImageView.image = MyImg;
    });该写在什么地方呀?如果是写在全局的线程函数的里面,MyImageView又不是全局的呀?

    有几个问题。
    你的UIImageView是在Storyboard里拖出来的,那直接连到VC上就可以了,.m中的这些代码不 要写:
    @synthesize MyImageView;
    MyImageView = [[UIImageView alloc] initWithFrame:self.view.frame];
    MyImageView.center = self.view.center;
    [self.view addSubview:MyImageView];另外,你说的对,ImageView不是全局的,也没必要是全局的,但你的线程是全局的,你应该在全局线程构造完一个Image之后,发出一个通知,以Image对参数,然后在VC初始化的时候监听这个通知,VC释放的时候取消监听,当收到通知的时候直接把Image赋值给ImageView就行了,不需要使用GCD。
    不过你的线程与VC应该也不是完全独立的吧?不然线程在走的时候,没有VC的话,你Image岂不是白构造了?
      

  5.   


    现在是这样我这里是这样的:UIImage *MyImg = [[UIImage alloc] initWithData: data ];在一个C语言写的全局的线程函数里面,
    在main.stotryboard里面拖了一个UIImageview控件。然后按住control,用鼠标拖动到ViewController头文件,
    ViewController.h里面  @property (strong, nonatomic) IBOutlet UIImageView *MyImageView;
    然后ViewController.m里面加上
    @synthesize MyImageView;
    然后在初始化的位置加上
      MyImageView = [[UIImageView alloc] initWithFrame:self.view.frame];
        MyImageView.center = self.view.center;
        [self.view addSubview:MyImageView];我想问dispatch_async(dispatch_get_main_queue(), ^{
        MyImageView.image = MyImg;
    });该写在什么地方呀?如果是写在全局的线程函数的里面,MyImageView又不是全局的呀?
    你在storyboard中将UIImageView设置成了插座(IBOutlet)变量,那么就不需要再在代码中来实例化了。
      MyImageView = [[UIImageView alloc] initWithFrame:self.view.frame];
     MyImageView.center = self.view.center;
     [self.view addSubview:MyImageView];
    上面的代码删除掉
    在viewDidload中视图的元素被渲染到屏幕中时,开启 一个异步线程来下载图片
    -(void)viewDidLoad {
          [super viewDidLoad];
          ///////异步请求
          NSString *pic_str =  @"xxxxxxxx";  //////你的图片地址
          NSURL * pic_url = [NSURL urlWithString:pic_str];
          NSURLRequest *pic_request = [NSURLRequest requestWithURL:pic_url];
         ///////发送异步请求
         [NSURLConnection sendAsynchronousRequest:pic_request 
                                           queue:[NSOperationQueue mainQueue]
                               completionHandler:^(NSURLResponse*urlResponce,NSData*data,NSError*error)  {
                    ////////回到UI线程更新
                    dispatch_async(dispatch_get_main_queue(), ^{
                                      MyImg  = [[UIImage alloc] initWithData: data ];
                                      imageView.image = MyImg;
                     });
         }
    }
      

  6.   


    现在是这样我这里是这样的:UIImage *MyImg = [[UIImage alloc] initWithData: data ];在一个C语言写的全局的线程函数里面,
    在main.stotryboard里面拖了一个UIImageview控件。然后按住control,用鼠标拖动到ViewController头文件,
    ViewController.h里面  @property (strong, nonatomic) IBOutlet UIImageView *MyImageView;
    然后ViewController.m里面加上
    @synthesize MyImageView;
    然后在初始化的位置加上
      MyImageView = [[UIImageView alloc] initWithFrame:self.view.frame];
        MyImageView.center = self.view.center;
        [self.view addSubview:MyImageView];我想问dispatch_async(dispatch_get_main_queue(), ^{
        MyImageView.image = MyImg;
    });该写在什么地方呀?如果是写在全局的线程函数的里面,MyImageView又不是全局的呀?

    有几个问题。
    你的UIImageView是在Storyboard里拖出来的,那直接连到VC上就可以了,.m中的这些代码不 要写:
    @synthesize MyImageView;
    MyImageView = [[UIImageView alloc] initWithFrame:self.view.frame];
    MyImageView.center = self.view.center;
    [self.view addSubview:MyImageView];另外,你说的对,ImageView不是全局的,也没必要是全局的,但你的线程是全局的,你应该在全局线程构造完一个Image之后,发出一个通知,以Image对参数,然后在VC初始化的时候监听这个通知,VC释放的时候取消监听,当收到通知的时候直接把Image赋值给ImageView就行了,不需要使用GCD。
    不过你的线程与VC应该也不是完全独立的吧?不然线程在走的时候,没有VC的话,你Image岂不是白构造了?唉,你们说的我都明白什么意思。可是我总共自学里一周object-c,懂的太少了。最后问一句就结贴,您说的这个“通知”,我需要搜哪些资料学习?
      

  7.   


    现在是这样我这里是这样的:UIImage *MyImg = [[UIImage alloc] initWithData: data ];在一个C语言写的全局的线程函数里面,
    在main.stotryboard里面拖了一个UIImageview控件。然后按住control,用鼠标拖动到ViewController头文件,
    ViewController.h里面  @property (strong, nonatomic) IBOutlet UIImageView *MyImageView;
    然后ViewController.m里面加上
    @synthesize MyImageView;
    然后在初始化的位置加上
      MyImageView = [[UIImageView alloc] initWithFrame:self.view.frame];
        MyImageView.center = self.view.center;
        [self.view addSubview:MyImageView];我想问dispatch_async(dispatch_get_main_queue(), ^{
        MyImageView.image = MyImg;
    });该写在什么地方呀?如果是写在全局的线程函数的里面,MyImageView又不是全局的呀?

    有几个问题。
    你的UIImageView是在Storyboard里拖出来的,那直接连到VC上就可以了,.m中的这些代码不 要写:
    @synthesize MyImageView;
    MyImageView = [[UIImageView alloc] initWithFrame:self.view.frame];
    MyImageView.center = self.view.center;
    [self.view addSubview:MyImageView];另外,你说的对,ImageView不是全局的,也没必要是全局的,但你的线程是全局的,你应该在全局线程构造完一个Image之后,发出一个通知,以Image对参数,然后在VC初始化的时候监听这个通知,VC释放的时候取消监听,当收到通知的时候直接把Image赋值给ImageView就行了,不需要使用GCD。
    不过你的线程与VC应该也不是完全独立的吧?不然线程在走的时候,没有VC的话,你Image岂不是白构造了?唉,你们说的我都明白什么意思。可是我总共自学里一周object-c,懂的太少了。最后问一句就结贴,您说的这个“通知”,我需要搜哪些资料学习?
    他说的“通知” 是NSNotificationCenter.  其实像这种请求网络图片的需求,使用异步的方式是必须的手段,当异步线程下载完后,再抛回到UI主线程去更新UI,这是通用的做法。其它的方式只会增加复杂度。
      

  8.   


    现在是这样我这里是这样的:UIImage *MyImg = [[UIImage alloc] initWithData: data ];在一个C语言写的全局的线程函数里面,
    在main.stotryboard里面拖了一个UIImageview控件。然后按住control,用鼠标拖动到ViewController头文件,
    ViewController.h里面  @property (strong, nonatomic) IBOutlet UIImageView *MyImageView;
    然后ViewController.m里面加上
    @synthesize MyImageView;
    然后在初始化的位置加上
      MyImageView = [[UIImageView alloc] initWithFrame:self.view.frame];
        MyImageView.center = self.view.center;
        [self.view addSubview:MyImageView];我想问dispatch_async(dispatch_get_main_queue(), ^{
        MyImageView.image = MyImg;
    });该写在什么地方呀?如果是写在全局的线程函数的里面,MyImageView又不是全局的呀?

    有几个问题。
    你的UIImageView是在Storyboard里拖出来的,那直接连到VC上就可以了,.m中的这些代码不 要写:
    @synthesize MyImageView;
    MyImageView = [[UIImageView alloc] initWithFrame:self.view.frame];
    MyImageView.center = self.view.center;
    [self.view addSubview:MyImageView];另外,你说的对,ImageView不是全局的,也没必要是全局的,但你的线程是全局的,你应该在全局线程构造完一个Image之后,发出一个通知,以Image对参数,然后在VC初始化的时候监听这个通知,VC释放的时候取消监听,当收到通知的时候直接把Image赋值给ImageView就行了,不需要使用GCD。
    不过你的线程与VC应该也不是完全独立的吧?不然线程在走的时候,没有VC的话,你Image岂不是白构造了?唉,你们说的我都明白什么意思。可是我总共自学里一周object-c,懂的太少了。最后问一句就结贴,您说的这个“通知”,我需要搜哪些资料学习?
    他说的“通知” 是NSNotificationCenter.  其实像这种请求网络图片的需求,使用异步的方式是必须的手段,当异步线程下载完后,再抛回到UI主线程去更新UI,这是通用的做法。其它的方式只会增加复杂度。非常感谢