iOS开发多线程篇—创建线程

一、创建和启动线程简单说明

一个NSThread对象就代表一条线程

创建、启动线程

(1) NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];

[thread start];

// 线程一启动,就会在线程thread中执行self的run方法

主线程相关用法

+ (NSThread *)mainThread; // 获得主线程

- (BOOL)isMainThread; // 是否为主线程

+ (BOOL)isMainThread; // 是否为主线程

 

其他用法

获得当前线程

NSThread *current = [NSThread currentThread];

线程的调度优先级:调度优先级的取值范围是0.0 ~ 1.0,默认0.5,值越大,优先级越高

+ (double)threadPriority;

+ (BOOL)setThreadPriority:(double)p;

设置线程的名字

- (void)setName:(NSString *)n;

- (NSString *)name;

其他创建线程的方式

(2)创建线程后自动启动线程   [NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];

(3)隐式创建并启动线程  [self performSelectorInBackground:@selector(run) withObject:nil];

上述2种创建线程方式的优缺点

优点:简单快捷

缺点:无法对线程进行更详细的设置

二、代码示例

1.使用古老的方式创建

 //
// YYViewController.m
//
//
// Created by apple on 14-6-23.
// Copyright (c) 2014年 itcase. All rights reserved.
// #import "YYViewController.h"
#import <pthread.h> @interface YYViewController ()
- (IBAction)btnClick;
@end @implementation YYViewController - (void)viewDidLoad
{
[super viewDidLoad];
} //按钮的点击事件
- (IBAction)btnClick {
//1.获取当前线程
NSThread *current=[NSThread currentThread];
//主线程
NSLog(@"btnClick----%@",current); //2.使用for循环执行一些耗时操作
pthread_t thread;
pthread_create(&thread, NULL, run, NULL);
} //c语言函数
void *run(void *data)
{
//获取当前线程,是新创建出来的线程
NSThread *current=[NSThread currentThread]; for (int i=; i<; i++) {
NSLog(@"btnClick---%d---%@",i,current);
}
return NULL;
} //多个线程,点击按钮执行按钮调用方法的时候,主线程没有被阻塞 @end

实现效果:

打印结果:

2.使用NSThread创建线程

 //
// YYViewController.m
//
//
// Created by apple on 14-6-23.
// Copyright (c) 2014年 itcase. All rights reserved.
// #import "YYViewController.h"
#import <pthread.h> @interface YYViewController ()
- (IBAction)btnClick;
@end @implementation YYViewController - (void)viewDidLoad
{
[super viewDidLoad];
} //按钮的点击事件
- (IBAction)btnClick {
//1.获取当前线程
NSThread *current=[NSThread currentThread];
//主线程
NSLog(@"btnClick----%@",current); //获取主线程的另外一种方式
NSThread *main=[NSThread mainThread];
NSLog(@"主线程-------%@",main); //2.执行一些耗时操作
[self creatNSThread];
// [self creatNSThread2];
// [self creatNSThread3];
} /**
* NSThread创建线程方式1
* 1> 先创建初始化线程
* 2> start开启线程
*/
-(void)creatNSThread
{
NSThread *thread=[[NSThread alloc]initWithTarget:self selector:@selector(run:) object:@"线程A"];
//为线程设置一个名称
thread.name=@"线程A";
//开启线程
[thread start]; NSThread *thread2=[[NSThread alloc]initWithTarget:self selector:@selector(run:) object:@"线程B"];
//为线程设置一个名称
thread2.name=@"线程B";
//开启线程
[thread2 start];
} /**
* NSThread创建线程方式2
*创建完线程直接(自动)启动
*/ -(void)creatNSThread2
{
// NSThread *thread=[NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"创建完线程直接(自动)启动"]; [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"创建完线程直接(自动)启动"];
} /**
* NSThread创建线程方式3
* 隐式创建线程, 并且直接(自动)启动
*/ -(void)creatNSThread3
{
//在后台线程中执行===在子线程中执行
[self performSelectorInBackground:@selector(run:) withObject:@"隐式创建"];
} -(void)run:(NSString *)str
{
//获取当前线程
NSThread *current=[NSThread currentThread];
//打印输出
for (int i=; i<; i++) {
NSLog(@"run---%@---%@",current,str);
}
}
@end

调用线程1,打印结果为:

调用线程2

调用线程3

iOS开发多线程篇—创建线程的更多相关文章

  1. iOS开发多线程篇 04 —线程间的通信

    iOS开发多线程篇—线程间的通信 一.简单说明 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任 ...

  2. iOS开发多线程篇 03 —线程安全

    iOS开发多线程篇—线程安全 一.多线程的安全隐患 资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象.同一个变量.同一个文件 当多个线程访问同一块 ...

  3. iOS开发多线程篇—线程的状态

    iOS开发多线程篇—线程的状态 一.简单介绍 线程的创建: self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(te ...

  4. iOS开发多线程篇—线程安全

    iOS开发多线程篇—线程安全 一.多线程的安全隐患 资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象.同一个变量.同一个文件 当多个线程访问同一块 ...

  5. iOS开发多线程篇—线程间的通信

    iOS开发多线程篇—线程间的通信 一.简单说明 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任 ...

  6. iOS 开发多线程篇—GCD的常见用法

    iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...

  7. iOS开发多线程篇—GCD介绍

    iOS开发多线程篇—GCD介绍 一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 G ...

  8. iOS开发多线程篇—GCD的常见用法

    iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...

  9. iOS开发多线程篇—NSOperation简单介绍

    iOS开发多线程篇—NSOperation简单介绍 一.NSOperation简介 1.简单说明 NSOperation的作⽤:配合使用NSOperation和NSOperationQueue也能实现 ...

随机推荐

  1. 1.2 如何在visual studio 中建立C#程序

    这一节简单介绍一下怎么在visual studio 2015中建立第一个C#程序,我使用的是2015版的visual studio,不同版本可能有一些差异,不过大体上是相同的,这些信息仅供新手参考,大 ...

  2. ESB 中的流量控制

    ESB 中的流量控制

  3. 数据库中 关于不能用in 不能用exist 等关键字 查询不出现字段的问题

    这是之前在网上见到的一道题,后来心里略微想了想 觉得应该可能,所以就一闪而过了,之前去面试晨光的时候面试者问了我这道问题,当时也只是把自己的想法说了一下,可能因为当时面试的感觉不太好,面试官也没有追究 ...

  4. spring框架IoC

    IoC反转控制, 举个反例: //数据操作类 public class DataBase { //向数据库中存储数据 public void saveDB() { } } //业务逻辑类 public ...

  5. python实现指定目录下JAVA文件单词计数的多进程版本

    要说明的是, 串行版本足够快了, 在我的酷睿双核 debian7.6 下运行只要 0.2s , 简直是难以超越. 多进程版本难以避免大量的进程创建和数据同步与传输开销, 性能反而不如串行版本, 只能作 ...

  6. web页面状态

    200 :表示请求成功,服务器已处理 201 :表示服务器端请求被创建, 202 :表示服务器端请求已经被接收,但未处理完成 400 :表示错误的请求 404:表示请求的资源未找到. 405:表示没有 ...

  7. Java 中System里getProperty(something)

    Java 中System里getProperty 方法获得系统参数 Key Description of Associated Value 中文描述 java.version Java Runtime ...

  8. gulp watch error ENOSPC

    in linux you fix this with the command:echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sy ...

  9. ubuntu常用命令记录集

    1.查找当前目录下包含某字符串的文件 #find ./ -type f |xargs grep "string" 2.查找文件 #find ./ -name filename 3. ...

  10. netbeans中给jpanl添加背景图片制定代码的理解——匿名内部类继承父类

    此测试是为了仿照在netbeans中给jpanl添加背景图片的制定代码的执行过程 在JpDemo中定义了个Car类的数据类型,但在给其赋值对象时使用了匿名内部类,继承了Car类,是其子类,并重写了父类 ...