您的位置:首页 > 其它

线程通信初识和总结

2015-08-13 16:30 344 查看
- (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中执行

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: