- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; //创建线程的第一种方式
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:@"universe"];
[thread start];
[thread release]; //创建线程的第二种方式,NSThread类方法
[NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"yuzhou"]; //创建线程的第三种方法 NSObject方法
[self performSelectorInBackground:@selector(run:) withObject:@"nsobject thread"]; //创建线程的第四种方式
NSOperationQueue *oprationQueue = [[NSOperationQueue alloc] init];
[oprationQueue addOperationWithBlock:^{
//这个block语句块在子线程中执行
NSLog(@"oprationQueue");
}];
[oprationQueue release]; //第五种创建线程的方式
NSOperationQueue *oprationQueue1 = [[NSOperationQueue alloc] init];
oprationQueue1.maxConcurrentOperationCount = ;//指定池子的并发数 //NSOperation 相当于java中的runnable接口,继承自它的就相当一个任务
NSInvocationOperation *invation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run:) object:@"invation"];
[oprationQueue1 addOperation:invation];//将任务添加到池子里面,可以给池子添加多个任务,并且指定它的并发数
[invation release]; //第二个任务
NSInvocationOperation *invation2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run2:) object:@"invocation2"];
invation2.queuePriority = NSOperationQueuePriorityHigh;//设置线程优先级
[oprationQueue1 addOperation:invation2];
[invation2 release]; [oprationQueue1 release]; //调用主线程,用来子线程和主线程交互,最后面的那个boolean参数,如果为yes就是等这个方法执行完了在执行后面的代码;如果为no的话,就是不管这个方法执行完了没有,接着往下走
[self performSelectorOnMainThread:@selector(onMain) withObject:self waitUntilDone:YES]; //---------------------GCD----------------------支持多核,高效率的多线程技术
//创建多线程第六种方式
dispatch_queue_t queue = dispatch_queue_create("name", NULL);
//创建一个子线程
dispatch_async(queue, ^{
// 子线程code... ..
NSLog(@"GCD多线程"); //回到主线程
dispatch_sync(dispatch_get_main_queue(), ^{//其实这个也是在子线程中执行的,只是把它放到了主线程的队列中
Boolean isMain = [NSThread isMainThread];
if (isMain) {
NSLog(@"GCD主线程");
}
});
}); self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
} - (void)onMain
{
Boolean b = [NSThread isMainThread];
if (b) {
NSLog(@"onMain;;%d",b);
}
} - (void) run:(NSString*)str
{
NSLog(@"多线程运行:::%@",str);
} - (void) run2:(NSString*)str
{
NSLog(@"多线程运行:::%@",str);
}
这些都是基本的线程创建,用NSThread来进行创建线程比较简单,如果是单一的创建线程可以用NSThread。直接创建可以使用。只需把线程执行的函数和方法写入即可创建一个线程出来。。
  

iOS-多线程 ,整理集锦,多种线程的创建的更多相关文章

  1. iOS多线程各种安全锁介绍 - 线程同步

    一.atomic介绍 github对应Demo:https://github.com/Master-fd/LockDemo 在iOS中,@property 新增属性时,可以增加atomic选项,ato ...

  2. IOS多线程之线程属性的配置

    版权声明:原创作品,谢绝转载!否则将追究法律责任.   设置线程堆栈的大小: 系统为每个你新创建的线程,都会为你的进程空间分配一定的内存作为该线程的堆栈.这里面有我们局部变量声明我们的方法就是一个堆栈 ...

  3. AJ学IOS(49)多线程网络之线程的创建NSThreand

    AJ分享,必须精品 一:NSThread的基本使用 1:创建和启动线程 一个NSThread对象就代表一条线程 创建.启动线程 NSThread *thread = [[NSThread alloc] ...

  4. iOS多线程编程之创建线程(转载)

    一.创建和启动线程简单说明 一个NSThread对象就代表一条线程 (1)创建.启动线程 NSThread *thread = [[NSThread alloc] initWithTarget:sel ...

  5. iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用

    目的 本文主要是分享iOS多线程的相关内容,为了更系统的讲解,将分为以下7个方面来展开描述. 多线程的基本概念 线程的状态与生命周期 多线程的四种解决方案:pthread,NSThread,GCD,N ...

  6. iOS多线程开发资源抢夺和线程间的通讯问题

    说到多线程就不得不提多线程中的锁机制,多线程操作过程中往往多个线程是并发执行的,同一个资源可能被多个线程同时访问,造成资源抢夺,这个过程中如果没有锁机制往往会造成重大问题.举例来说,每年春节都是一票难 ...

  7. iOS多线程编程指南(二)线程管理

    当应用程序生成一个新的线程的时候,该线程变成应用程序进程空间内的一个实体.每个线程都拥有它自己的执行堆栈,由内核调度独立的运行时间片.一个线程可以和其他线程或其他进程通信,执行I/O操作,甚至执行任何 ...

  8. ios 多线程开发(二)线程管理

    线程管理 iOS和OS X中每一个进程(或程序)由一个或多个线程组成.程序由一个运行main方法的线程开始,中间可以产生其他线程来执行一些指定的功能. 当程序产生一个新线程后,这个线程在程序进程空间内 ...

  9. Java多线程之线程的创建

    好久没有更博客了,最近一直在忙工作的事情.现在终于空下来了,这2天会抓紧时间整理多线程和socket,把JavaSE结束掉. 关于多线程,首先会涉及到哪些东西呢?首先要了解线程,为什么要使用线程,线程 ...

随机推荐

  1. iOS分析UI利器——Reveal及简单破解方法

    Reveal作为分析APP UI的利器确实非常好用,用来查看任意UI布局也很方便 一.模拟器进行分析 1.打开Reveal(http://revealapp.com下载) 2.打开Xcode 3.Re ...

  2. java 反射的应用 以及通过反射 用到的工厂模式

    java反射详解 本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案 ...

  3. 手写json

    json的意思是JavaScript 对象表示法 '{"0":0,"b":[3,4,5],"c":"0","d ...

  4. 移动支持 – ASP.NET MVC 4 系列

           目前,有各种各样的方法可以提高网站应用程序的移动体验.在某些情况下,我们只想在小规格上做一些微小的风格变化:另一些情况下,我们可能完全改变外观显示或者一些视图的内容:最极端的情况下,我们 ...

  5. sql server 条件 not in (null)总是false

    SELECT  1 WHERE   2 NOT  IN ( 1 ); 结果: (无列名) 1   SELECT  1 WHERE   2 NOT  IN ( 1, NULL ); 结果:(无列名)   ...

  6. tomcat解决加载JSP文件过大错误

    当遇到多个Jsp include一起的时候加载时遇到如下错误: Error:SEVERE: Servlet.service() for servlet jsp threw exception org. ...

  7. Verilog HDL那些事_建模篇笔记(实验七:数码管电路驱动)

    1.同步动态扫描 多个数码管的显示采用的是同步动态扫描方法,同步动态扫描指的是:行信号和列信号同步扫描,是一种并行操作. 2.数码管驱动电路实现思路      如果要求数码管显示我们想要的数字,首先需 ...

  8. 6个错误将杀死你的App

    没有开发者或者设计师会故意破坏应用的设计.所有的应用程序创建者都对自己的应用寄予美好的愿望,但是很多错误是在他们无意识的状态下破坏app的设计.以下是应用开发者和设计者经常犯的几个错误,不过这些错误是 ...

  9. cPage分页详细介绍

    asp.net中各种数据控件,datalist.gridview.Repeater等分页是最常用的功能,几乎任何一个B/S项目,无论是系统还是网站都会用到.分页时,读取整个数据,直接绑定到控件,都可以 ...

  10. 将 ASP.NET MVC3 Razor 项目部署到虚拟主机中

    国内很多网站空间都只支持.NET 2.0 和 .NET 3.0 3.5,很少有空间商支持.NET 4的,即使有个别支持.NET 4,但是不支持MVC的默认路由访问形式. Go Daddy 的主机支持, ...