GCD 线程间的通信

network | | 访问(31)
// 需要设置按钮的image和backgroundImage,建议先把按钮类型改为custom,才能保证设置成功
// 属性名不能以new开头
// 只有在init开头的构造方法中,才允许对self进行赋值

#define GlobalQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
#define MainQueue dispatch_get_main_queue()

#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIButton *button;
@property (weak, nonatomic) IBOutlet UIImageView *newImageView;
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self newImageView];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    dispatch_async(GlobalQueue, ^{
        NSLog(@"donwload---%@", [NSThread currentThread]);
        // 1.子线程下载图片
        NSURL *url = [NSURL URLWithString:@"http://d.hiphotos.baidu.com/image/pic/item/37d3d539b6003af3290eaf5d362ac65c1038b652.jpg"];
        NSData *data = [NSData dataWithContentsOfURL:url];
        UIImage *image = [UIImage imageWithData:data];
        
        // 2.回到主线程设置图片
        dispatch_async(MainQueue, ^{
            NSLog(@"setting---%@ %@", [NSThread currentThread], image);
            [self.button setImage:image forState:UIControlStateNormal];
        });
    });
}

@end


#import <Foundation/Foundation.h>
@interface Person : NSObject
- (instancetype)initWithName:(NSString *)name;
@end


#import "Person.h"
@implementation Person
// 只有在init开头的构造方法中,才允许对self进行赋值

- (instancetype)initWithName:(NSString *)name
{
    if (self = [super init]) {
    
    }
    return self;
}

@end