线程通信初识和总结
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中执行 */
相关文章推荐
- 如何安装Android Studio
- Servlet线程安全问题
- vim快捷键的使用
- iScroll内部textarea滑动不了bug
- win8应用层进程隐藏工具
- 学习新语言
- 栈的链表实现
- Nginx的tcp反向代理初探
- 获取页面可视区的高度·DOCTYPE的作用·将滚动条定位到具体的元素
- Java 生成 UUID
- hdu 1247 Hat’s Words Trie树(+测试数据)
- 生理学教学系统——心脏泵血流程
- iScroll内部textarea滑动不了bug
- Unity3D中实现动态加载Resources目录外的资源
- Hadoop安装
- getRequestDispatcher()与sendRedirect()的区别
- SOAPUI 安装
- nyoj38 布线问题
- hdu5384(AC自动机+纪录重复单词出现的次数)
- js禁止右键功能,禁止复制