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];

     ; 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];
     //打印输出
     ; i<; i++) {
        NSLog(@"run---%@---%@",current,str);
     }
 }
 @end

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

调用线程2

调用线程3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. iOS开发多线程篇—NSOperation基本操作

    iOS开发多线程篇—NSOperation基本操作 一.并发数 (1)并发数:同时执⾏行的任务数.比如,同时开3个线程执行3个任务,并发数就是3 (2)最大并发数:同一时间最多只能执行的任务的个数. ...

  9. iOS开发多线程篇—自定义NSOperation

    iOS开发多线程篇—自定义NSOperation 一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UI ...

随机推荐

  1. 基于Treeview控件遍历本地磁盘

    一.前言 Treeview控件常用于遍历本地文件信息,通常与Datagridview与ImageList搭配.ImageList控件用于提供小图片给TreeView控件,DatagridView通常显 ...

  2. 搭建Android底层开发环境

    为了开发linux驱动方便些,我们一般将linux作为Android的开发环境,那么就需要搭建Android的开发环境,下面是一些搭建Android底层时的心得: (1)安装JDK:除了普遍使用的下载 ...

  3. Android使用ndk-stack获取so奔溃堆栈

    利用NDK做开发,因为各种原因的不小心,导致了闪退问题,没有stack的话,很难查到问题的所在.这时候ndk-stack出场了. 先看看如下DUMP信息: ********** Crash dump: ...

  4. 机器学习&amp;数据挖掘笔记_22(PGM练习六:制定决策)

    前言: 本次实验是将一些简单的决策理论和PGM推理结合,实验内容相对前面的图模型推理要简单些.决策理论采用的是influence diagrams,和常见图模型本质一样, 其中的决策节点也可以用CPD ...

  5. C#进行Visio二次开发之文件导出及另存Web页面

    在我前面很多关于Visio的开发过程中,介绍了各种Visio的C#开发应用场景,包括对Visio的文档.模具文档.形状.属性数据.各种事件等相关的基础处理,以及Visio本身的整体项目应用,虽然时间过 ...

  6. TCP 介绍

    TCP介绍 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的计算机网络O ...

  7. DB2 UDB DBA 核对清单

    本文摘自 http://www-128.ibm.com/developerworks/cn/db2/library/techarticles/dm-0404snow/index.htmlDB2 UDB ...

  8. 网页JS获取当前地理位置(省市区)

    眼看2014又要过去了,翻翻今年的文章好像没有写几篇,忙真的或许已经不能成为借口了,在忙时间还是有的,就像海绵里的水挤挤总会有滴.真真的原因是没有学习过什么新的技术,工作过程中遇到的问题也不是非常难并 ...

  9. Google的分布式关系型数据库F1和Spanner

    F1是Google开发的分布式关系型数据库,主要服务于Google的广告系统.Google的广告系统以前使用MySQL,广告系统的用户经常需要使用复杂的query和join操作,这就需要设计shard ...

  10. AMD64与IA64的区别

    其实很多人从字面上,都以为AMD64就是针对AMD CPU的,IA64是针对INTEL CPU,其实是错的,我最初也是这样认为,其实不然: 你在市面上买的到的intel 64位 CPU都属于amd64 ...