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

一个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
10 #import "YYViewController.h"
11 #import <pthread.h>
14 @interface YYViewController ()
15 - (IBAction)btnClick;
16 @end
19 @implementation YYViewController
22 - (void)viewDidLoad
23 {
24 [super viewDidLoad];
25 }
28 //按钮的点击事件
29 - (IBAction)btnClick {
30 //1.获取当前线程
31 NSThread *current=[NSThread currentThread];
32 //主线程
33 NSLog(@"btnClick----%@",current);
34
35 //2.使用for循环执行一些耗时操作
36 pthread_t thread;
37 pthread_create(&thread, NULL, run, NULL);
38 }
41 //c语言函数
42 void *run(void *data)
43 {
44 //获取当前线程,是新创建出来的线程
45 NSThread *current=[NSThread currentThread];
48 for (int i=0; i<10000; i++) {
49 NSLog(@"btnClick---%d---%@",i,current);
50 }
51 return NULL;
52 }
54 //多个线程,点击按钮执行按钮调用方法的时候,主线程没有被阻塞
56 @end

实现效果:

打印结果:

2.使用NSThread创建线程

  1 //
2 // YYViewController.m
5 // Created by apple on 14-6-23.
6 // Copyright (c) 2014年 itcase. All rights reserved.
7 //
8
9 #import "YYViewController.h"
10 #import <pthread.h>
13 @interface YYViewController ()
14 - (IBAction)btnClick;
15 @end
18 @implementation YYViewController
20 - (void)viewDidLoad
21 {
22 [super viewDidLoad];
23 }
 26 //按钮的点击事件
27 - (IBAction)btnClick {
28 //1.获取当前线程
29 NSThread *current=[NSThread currentThread];
30 //主线程
31 NSLog(@"btnClick----%@",current);
32
33 //获取主线程的另外一种方式
34 NSThread *main=[NSThread mainThread];
35 NSLog(@"主线程-------%@",main);
36
37 //2.执行一些耗时操作
38 [self creatNSThread];
39 // [self creatNSThread2];
40 // [self creatNSThread3];
41 }
44 /**
45 * NSThread创建线程方式1
46 * 1> 先创建初始化线程
47 * 2> start开启线程
48 */
49 -(void)creatNSThread
50 {
51 NSThread *thread=[[NSThread alloc]initWithTarget:self selector:@selector(run:) object:@"线程A"];
52 //为线程设置一个名称
53 thread.name=@"线程A";
54 //开启线程
55 [thread start]; 58 NSThread *thread2=[[NSThread alloc]initWithTarget:self selector:@selector(run:) object:@"线程B"];
59 //为线程设置一个名称
60 thread2.name=@"线程B";
61 //开启线程
62 [thread2 start];
63 } 66 /**
67 * NSThread创建线程方式2
68 *创建完线程直接(自动)启动
69 */
70
71 -(void)creatNSThread2
72 {
73 // NSThread *thread=[NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"创建完线程直接(自动)启动"];
74
75 [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"创建完线程直接(自动)启动"];
76 } 79 /**
80 * NSThread创建线程方式3
81 * 隐式创建线程, 并且直接(自动)启动
82 */
83
84 -(void)creatNSThread3
85 {
86 //在后台线程中执行===在子线程中执行
87 [self performSelectorInBackground:@selector(run:) withObject:@"隐式创建"];
88 } 92 -(void)run:(NSString *)str
93 {
94 //获取当前线程
95 NSThread *current=[NSThread currentThread];
96 //打印输出
97 for (int i=0; i<10; i++) {
98 NSLog(@"run---%@---%@",current,str);
99 }
100 }
101 @end

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

调用线程2

调用线程3

iOS多线程编程之创建线程(转载)的更多相关文章

  1. iOS多线程编程之创建线程安全(转载)

    一.多线程的安全隐患 资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象.同一个变量.同一个文件 当多个线程访问同一块资源时,很容易引发数据错乱和数 ...

  2. java多线程编程(二创建线程)

    1.概念           因为java是完全面向对象的,所以在java中,我们说的线程,就是Thread类的一个实例对象.所以,一个线程就是一个对象,它有自己字段和方法. 2.创建线程 创建线程有 ...

  3. iOS多线程编程之自定义NSOperation(转载)

    一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UITableViewController. 1 // ...

  4. iOS多线程编程原理及实践

    摘要:iOS开发中,开发者不仅要做好iOS的内存管理,而且如果你的iOS涉及多线程,那你也必须了解iOS编程中对多线程的限制,iOS主线程的堆栈大小为1M,其它线程均为512KB,且这个限制开发者是无 ...

  5. iOS多线程编程指南

    iOS多线程编程指南(拓展篇)(1) 一.Cocoa 在Cocoa上面使用多线程的指南包括以下这些: (1)不可改变的对象一般是线程安全的.一旦你创建了它们,你可以把这些对象在线程间安全的传递.另一方 ...

  6. iOS多线程编程之线程的状态(转载)

    一.简单介绍 线程的创建: self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil]; ...

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

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

  8. iOS多线程编程之多线程简单介绍(转载)

    一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过“ ...

  9. IOS高级编程之三:IOS 多线程编程

    多线程的概念在各个操作系统上都会接触到,windows.Linux.mac os等等这些常用的操作系统,都支持多线程的概念. 当然ios中也不例外,但是线程的运行节点可能是我们平常不太注意的. 例如: ...

随机推荐

  1. Git服务器的搭建和使用

    一.GIT服务器的搭建 1. 安装Git yum -y install git 2. 创建git用户 adduser git 3. 创建证书登陆   收集所有客户端需要登录的用户的公钥,就是他们自己的 ...

  2. flask操作mongo两种方式--ORM

    #manage.py #coding=utf-8 #Flask-Script是一个可以在flask应用外部编写脚本的扩展 #常用功能: #运行一个开发的服务器 #python shell中操作数据库看 ...

  3. vc 使用ShellExecut来启动控制面板中功能模块的操作

    文件夹,文件,网址可以创建快捷方式,控制面板 中的设置也可以创建快捷方式,下面是快捷方式的命令,使用方法:在桌面或文件夹的空白处点右键,选择新建,快捷方式,在“请键入项目的位置”输入下面的命 令,然后 ...

  4. PyQt4显示提示信息

    我们可以为任何窗口部件设置一个气球提示. #!/usr/bin/python # -*- coding:utf-8 -*- import sys from PyQt4 import QtGui fro ...

  5. 为JDK自带的jvisualvm安装Visual GC插件

    1.打开cmd,输入jvisualvm,回车: 2.点击工具——>插件; 3.访问网址:https://visualvm.github.io/pluginscenters.html,找到自己JD ...

  6. 对Array进行排序(按字母顺序)

    通过使用java.utils.Arrays.sort()和String.CASE_INSENSITIVE_OREDR,可以很容易的对结果进行排序(按字母顺序): String[] array = { ...

  7. [原]git的使用(一)---建立本地仓库、add和commit、status和git diff、版本回退使用git reset

    在window下已经安装了git的环境 1.建立本地仓库 mkdir   test     #建立test目录 cd   test        #进入目录 git  init           # ...

  8. [转载]几个有趣的Linux命令

      本文给大家介绍几个有趣的Linux命令. 1. pv 命令 有时候我们在电影屏幕上看到一些字幕一个个匀速显示出来,像有人在边敲键盘,边显示一样.Linux上的pv命令可以实现这种效果. 默认情况下 ...

  9. php-config

    php-config php-config 是一个简单的命令行脚本用于获取所安装的 PHP 配置的信息. 在编译扩展时,如果安装有多个 PHP 版本,可以在配置时用 --with-php-config ...

  10. C语言程序设计--指针基础

    指针 指针是一种特殊变量(存储内存地址).当然它本身也是占用内存的,所以会带来一个问题,那就是指针存在以下概念:指针的类型(int* 一个整型指针),指针指向的类型(int* p = 5, 说明指针p ...