IOS多线程开发-NSThread原理及演示


// 创建线程方式1

- (void)test1

{

// 实例化一个线程对像

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

// 让线程开始工作,启动线程, 在新开的线程执行run方法

[thread
start];

}

// 创建线程方式2

- (void)test2

{

NSLog(@"---%@", [NSThread

currentThread]);

[NSThread
detachNewThreadSelector:@selector(run:)
toTarget:self
withObject:@"hello"];

}

// 创建线程方式3

- (void)test3

{

// “隐式”创建线程方式

[self

performSelectorInBackground:@selector(run:)

withObject:@"cz"];

}

#pragma mark - 线程的属性

- (void)test4

{

NSThread *threadA = [[NSThread
alloc]
initWithTarget:self
selector:@selector(run:)
object:@"hello"];

threadA.name
=
@"thraed A";

// 线程优先级

// 是一个浮点数,0.0~1.0。 默认值 0.5

// 开发的时候,一般不去修改优先级的值。

// 优先级,必须调用很多次的时候,才能体现出来。

threadA.threadPriority =
0.1;

// 开始工作

[threadA
start];

}

//  NSThread线程的状态

- (void)run

{

NSLog(@"%s", __func__);

// 刚进来就睡会, 睡2秒

//    [NSThread sleepForTimeInterval:5.0];

// 睡到指定的时间点

//    [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:5.0]];

for (int
i =
0; i <
20; i++) {

// 满足某一个条件以后,阻塞线程的执行。 也就是让线程休息一会

if (i ==

10) {

[NSThread

sleepForTimeInterval:3.0];

}

// 一旦达到某一个条件,就强制终止线程的执行

if (i ==

15) {

// 一旦强制终止,就在不能重新启动

// 一旦强制终止,后面的代码都不会执行

[NSThread

exit];

}

NSLog(@"%@--- %d", [NSThread

currentThread], i);

}

NSLog(@"线程结束");

}

// 把数据传到主线程,在主线程更新UI

1.[self

performSelectorOnMainThread:@selector(downloadFinish:)

withObject:image

waitUntilDone:NO];

2. [self
performSelector:@selector(downloadFinish:)
onThread:[NSThread mainThread] withObject:image waitUntilDone:NO];

3.[self.iconView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES];

// nonatomic 非原子属性

// atomic 原子属性--默认属性

// 原子属性就是针对多线程设计的。 原子属性实现 单(线程)写 多(线程)读

// 因为写的安全级别要求更高。 读的要求低一些,可以多读几次来保证数据的正确性

// 原子属性内部使用的 自旋锁

// 自旋锁和互斥锁

// 共同点: 都可以锁定一段代码。 同一时间, 只有线程能够执行这段锁定的代码

// 区别:互斥锁,在锁定的时候,其他线程会睡眠,等待条件满足,再唤醒

// 自旋锁,在锁定的时候, 其他的线程会做死循环,一直等待这条件满足,一旦条件满足,立马去执行,少了一个唤醒过程

时间: 2024-11-10 01:27:50

IOS多线程开发-NSThread原理及演示的相关文章

iOS多线程开发——NSThread浅析

在IOS开发中,多线程的实现方式主要有三种,NSThread.NSOperation和GCD,我前面博客中对NSOperation和GCD有了较为详细的实现,可以参考<iOS多线程开发--NSOperation/NSOperationQueue浅析><iOS多线程开发--GCD的使用与多线程开发浅析>.以及对于多线程中的同步异步,并行串行等概念,我在<GCD实践--串行队列/并发队列与iOS多线程详解>中也有较为详细的讲解.为了学习的完整性,今天我们主要从代码层面来实现

iOS多线程开发--NSThread NSOperation GCD

多线程 当用户播放音频.下载资源.进行图像处理时往往希望做这些事情的时候其他操作不会被中 断或者希望这些操作过程中更加顺畅.在单线程中一个线程只能做一件事情,一件事情处理不完另一件事就不能开始,这样势必影响用户体验.早在单核处理器时期 就有多线程,这个时候多线程更多的用于解决线程阻塞造成的用户等待(通常是操作完UI后用户不再干涉,其他线程在等待队列中,CPU一旦空闲就继续执行, 不影响用户其他UI操作),其处理能力并没有明显的变化.如今无论是移动操作系统还是PC.服务器都是多核处理器,于是“并行

iOS多线程开发小demo2,NSThread篇

用NSThread创建子线程的3种方法 // DYFViewController.m // 623-02-pthread // // Created by dyf on 14-6-23. // Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved. // #import "DYFViewController.h" #import <pthread.h> @interface DYFViewController

iOS多线程开发小demo

首先演示一下主线程的阻塞 // DYFViewController.m // 623-01-阻塞多线程 // // Created by dyf on 14-6-23. // Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved. // #import "DYFViewController.h" @interface DYFViewController () @end @implementation DYFViewCon

iOS多线程-NSThread

本文转载自嘟嘟夜未央的博文:http://www.cnblogs.com/huluo666/p/3645889.html,修改了部分代码和贴图,如有侵犯版权请与我联系删除. 多线程这个概念的接触是蛮早的时候了,当时还是单核单CPU的时候,Thread这个概念已经出现了,当时比较流行的方案是时间片轮流,线程可以优先级抢占,但一次只能运行一个线程,实际上多线程是不能真正并行处理的,只是宏观上表现的多线程在齐头并进.现在硬件进步了很多,多核的CPU时代来临了,于是线程开始了真正意义上的并行处理,多线程

IOS多线程开发

本文转载至 http://blog.csdn.net/davidsph/article/details/8171607 IOS的多线程,一般分为三种方式: 1,Thread;2, Cocoa operations;3, Grand Central Dispatch (GCD) (iOS4 才开始支持) 下面简单说明一下: 1:NSThread   创建方式主要有两种: [NSThread detachNewThreadSelector:@selector(myThreadMainMethod:)

iOS多线程开发小demo5 线程间的通信

// DYFViewController.m // 623-06-线程间的通信 // // Created by dyf on 14-6-23. // Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved. // #import "DYFViewController.h" @interface DYFViewController () @property (weak, nonatomic) IBOutlet UIImag

iOS多线程开发小demo7 GCD队列组

// DYFViewController.m // 623-08-队列组 // // Created by dyf on 14-6-23. // Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved. // #import "DYFViewController.h" @interface DYFViewController () @property (weak, nonatomic) IBOutlet UIImageVi

iOS多线程开发小demo4,线程的同步问题

// DYFViewController.m // 623-05-线程同步问题 // // Created by dyf on 14-6-23. // Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved. // #import "DYFViewController.h" @interface DYFViewController () @property (nonatomic, assign) int leftCount