线程通信初识和总结

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    [queue addOperationWithBlock:^{
        NSURL *url = [NSURL URLWithString:@"http://pic.nipic.com/2008-05-07/20085722191339_2.jpg"];
        NSData *data = [NSData dataWithContentsOfURL:url];
        UIImage *image = [UIImage imageWithData:data];
        NSLog(@"%p",image);
        // 2.回到主线程,显示图片
        
        
        // 0.
        [self.imageView performSelector:@selector(setImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:YES];
        // 1.
        //        [self.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES];
        // 2.
        //        dispatch_async(dispatch_get_main_queue(), ^{
        //            self.imageView.image = image;
        //        }) ;
        // 3.
        [[NSOperationQueue mainQueue] addOperationWithBlock:^{
            self.imageView.image = image;
        }];
        
        
        NSLog(@"finish");
        
    }];
}

    //    NSOperationQueue/
    // NSOperation 和 NSOperationQueue
    /**
     *  1.队列的类型
     主队列
     [NSOperation mainqueue];
     添加到主队列中的操作,都会放到主线程中执行
     非主队列
     [[NSOperation alloc] init];
     添加到非主队列中的操作,都会放到子线程中执行
     
     2.队列添加任务
     - addOperation:
     - addOperationWithBlock:
     
     3.常见方法
     设置最大并发数
     maxConcurrentOperationCount
     队列的操作
     cancelAllOperations
     - cancel
     -setSuspended:
     
     4. 操作之间的依赖
     - addDependency:
     操作B依赖于A,等A执行完才会执行B
     不能互相依赖
     可以在不同queue的NSOperation直接建立依赖
     
     5. 通信
     // 执行一些比较耗时的操作
     // 回到主线程
     */
    
    /**
     *  6. 从其他线程回到主线程的方式
     perform
     GCD
     NSOperationQueue
     */
    
    /**
     *  7.判断编译器环境是ARC还是MRC?
     #if __has feature(objc_arc)
     // 当前编译器环境是ARC
     #else
     // 当前编译器环境是MRC
     #endif
     */
    
    /**
     *  8.类的初始化方法
     + load
     当类第一次转载进内存 OC运行时系统,就会调用
     程序一启动就会调用
     程序运行过程中,只会调用一次
     
     + initialize
     当类第一次被使用 ,比如alloc 就会调用
     并非程序一启动就会调用
     在程序运行过程中,1个类的某个操作,只想指向一次,放在+load中执行

     */


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值