IOS 多线程 NSOperation GCD
1.NSInvocationOperation
NSInvocationOperation * op;
NSOperationQueue * que = [[NSOperationQueuealloc]init];
op = [[ NSInvocationOperationalloc]initWithTarget:selfselector:@selector(run:) object:@"aaa"];
[que addOperation:op];
// 这里不要使用 op start,否则就会出现住线程阻塞的现象。 默认情况下,调用了start方法后并不会开一条新线程去执行操作,而是在当前线程同步执行操作。只有将operation放到一个NSOperationQueue中,才会异步执行操作。
-(void)run:(id)data
{
while (![op isCancelled])
{
[NSThreadsleepForTimeInterval:1];
NSLog(@"run");
}
}
通过 [op cancel]; 来停止线程
2.
__block NSBlockOperation * op = [NSBlockOperation blockOperationWithBlock:^(){
while ( ![op isCancelled])
{
[NSThread sleepForTimeInterval:0.3];
NSLog(@"cccc");
}
}];
NSOperationQueue * que = [[NSOperationQueuealloc]init];
[que addOperation:op];
这里也需要通过 queue来控制,使用start的话也会造成阻塞。
这里的 op 需要使用 __block 来控制,因为在^(){}里面用到,否则不对。
3.自定义 NSOperation
#import <Foundation/Foundation.h>
@interface MyOperation : NSOperation
@end
#import "MyOperation.h"
@implementation MyOperation
-(void)main
{
@autoreleasepool
{
while ( YES )
{
[NSThreadsleepForTimeInterval:0.3];
if( [self isCancelled] )
break;
NSLog(@"aaaaaa");
}
}
}
// 如何调用
-(void)aaaa
{
static BOOL bFlog = NO;
if( !bFlog )
{
_op = [[MyOperation alloc]init];
NSOperationQueue * que = [[NSOperationQueuealloc]init];
[que addOperation:_op];
}
else
{
[_op cancel];
}
bFlog = YES;
}
3. GCD
dispatch_async(dispatch_get_global_queue(0, 0), ^(void){
for( NSInteger index = 0; index < 10; ++ index )
{
[NSThreadsleepForTimeInterval:0.3];
NSLog(@"index:%d",index);
dispatch_async(dispatch_get_main_queue(), ^(void){
_label.text = [NSString stringWithFormat:@"index:%d",index];
});
}
});
IOS 多线程 NSOperation GCD的更多相关文章
- iOS 多线程 之 GCD(大中枢派发)(一)
导语: 本文个人原创,转载请注明出处(http://www.cnblogs.com/pretty-guy/p/8126981.html) 在iOS开发中多线程操作通常是一下3种,本文着重介绍Dispa ...
- [iOS]多线程和GCD
新博客wossoneri.com 进程和线程 进程 是指在系统中正在运行的一个应用程序. 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内. 比如同时打开QQ.Xcode,系统就会分别 ...
- iOS多线程 NSThread/GCD/NSOperationQueue
无论是GCD,NSOperationQueue或是NSThread, 都没有线程安全 在需要同步的时候需要使用NSLock或者它的子类进行加锁同步 "] UTF8String], DISPA ...
- iOS 多线程 NSOperation、NSOperationQueue
1. NSOperation.NSOperationQueue 简介 NSOperation.NSOperationQueue 是苹果提供给我们的一套多线程解决方案.实际上 NSOperation.N ...
- iOS多线程 NSOperation的用法
上一篇写了 GCD 的使用,接下来就了解一下 NSOperation ,NSOperation是苹果对 GCD 的 OC 版的一个封装,但是相对于GCD来说可控性更强,并且可以加入操作依赖. NSOp ...
- IOS多线程(GCD)
简介 Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统.这建立在任务并行执行的线程池模式的基础上的.它首次 ...
- iOS多线程--NSOperation 浅显易懂
NSOperation是基于GCD的一套多线程实现方案,和GCD一样,线程的生命周期是由系统来自动管理的,不用像NSThread和Pthread一样让程序员手动管理.相对于GCD来说,它更加地面向对象 ...
- iOS多线程--NSOperation
NSOperation是基于GCD的一套多线程实现方案,和GCD一样,线程的生命周期是由系统来自动管理的,不用像NSThread和Pthread一样让程序员手动管理.相对于GCD来说,它更加地面向对象 ...
- iOS多线程---NSOperation介绍和使用
1. NSOperation实现多线程编程,需要和NSOperationQueue一起使用. (1)先将要执行的操作封装到NSOperation中 (2)将NSOperation对象添加到NSOpe ...
随机推荐
- SwfUpload vs里运行可以上传文件,放到iis上上传就报404错误。
网上的答案都是说swfupload 的upload_url 路径要设置成绝对路径,但是我也设置了,但是还是不行,然后又找了方法,终于找到了,点击这里查看 解决办法: <system.webSer ...
- python 知识 rstrip,strip,lstrip
rstrip,strip,lstrip 作用:去除字符串中的空格或指定字符 一.默认用法:去除空格str.strip() : 去除字符串两边的空格str.lstrip() : 去除字符串左边的空格s ...
- C#正则表达式Regex类
C#正则表达式Regex类的使用 C#中为正则表达式的使用提供了非常强大的功能,这就是Regex类.这个包包含于System.Text.RegularExpressions命名空间下面,而这个命名空间 ...
- sentos 上安装vnc图形界面
一.安装gnome图形化桌面 CentOS 6.3 64位 #yum groupinstall -y "X Window System" #yum groupinstall - ...
- 【斜率DP】BZOJ 3675:[Apio2014]序列分割
3675: [Apio2014]序列分割 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 1066 Solved: 427[Submit][Statu ...
- hdu 4336 Card Collector 容斥原理
读完题目就知道要使用容斥原理做! 下面用的是二进制实现的容斥原理,详见:http://www.cnblogs.com/xin-hua/p/3213050.html 代码如下: #include< ...
- EL表达式对数组、集合操作
el表达式是通过${key}的方式获取对象中的值.在el表达式中有如下几个隐含的对象,pageScope,requestSope,sessionScope,applicationScope,如果要取$ ...
- live555源码研究(十)------在编译过程中遇到的问题及解决方法
一.编译testOnDemandRTSPServer.cpp. 在testProgs项目中,加入testOnDemandRTSPServer.cpp进行编译,编译类型是编译成exe文件,在编译过程中会 ...
- windows 下 文件属性及目录列表操作
转:http://blog.sina.com.cn/s/blog_686d0fb001012tsg.html 我们需要一个结构体和几个函数.这些函数和结构体在<io.h>的头文件中,结构体 ...
- centos安装异常解决方法
VMware系统安装Centos7后,第一次启动出现以下异常信息: Initial setup of CentOS Linux (core) ) [x] Creat user ) [!] Licens ...