- (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中执行
*/
线程通信初识和总结
最新推荐文章于 2024-07-28 20:51:23 发布