NSThread基础使用

1.创建和启动线程

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

创建,启动线程

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

2.线程相关用法

主线程相关用法

1 + (NSThread *)mainThread;
2 - (BOOL)isMainThread;
3 + (BOOL)isMainThread;

获得当前线程

1 NSThread *current = [NSThread currentThread];

线程的调度优先级

1 + (double)threadPriority;
2 + (BOOL)setThreadPriority:(double)p;
3 - (double)threadPriority;
4 - (BOOL)setThreadPriority:(double)p;

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

线程的名字

1 - (void) setName:(NSString *)n;
2 - (NSString *)name;

创建线程后自动启动线程

1 [NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];

隐式创建线程并启动线程

1 [self performSelectorInBackground:@selector(run) withObject:nil];

3.线程的五种状态

新建(New) 就绪(Runnable) 运行(Running) 阻塞(Blocked) 死亡(Dead)

4.控制线程状态

启动线程

1 - (void)start;

阻塞线程

1 + (void)sleepUntilDate:(NSDate *)date;
2 + (void)sleepForTimeInterval:(NSTimeInterval)ti;

强制停止线程

1 + (void)exit;

5.多线程的安全隐患

资源共享:多个线程访问同一块资源;

处理共享数据时很容易引发数据错乱和数据安全问题;

6.安全隐患解决--互斥锁

互斥锁使用格式:@synchroniazed(锁对象) { 代码 }

互斥锁的优缺点:

优点:能有效防止因多线程抢夺资源造成的数据安全问题;

缺点:大量消耗CPU资源;

互斥锁的使用前提:多条线程抢夺同一块资源;

相关术语:线程同步;

线程同步的含义:多条线程按顺序执行任务;

互斥锁就是使用了线程同步技术;

7.原子属性和非原子属性

OC在定义属性时有nonatomic和atomic两种选择:

atomic:原子属性,为setter方法加锁(默认就是atomic);

nonatomic:非原子属性,不会为setter方法加锁;

atomic加锁原理:

1 @property (assign, atomic) int age;
2 - (void)setAge:(int)age
3 {
4 @synchronized(self) {
5     _age = age;
6   }
7 }

nonatomic和atomic对比

nonatomic:线程安全,需要消耗大量的资源;

atomic:线程不安全,适合内存较小的移动设备;

iOS的开发建议:

所有属性都定义为nonatomic;

尽量避免多线程抢夺同一块资源;

尽量将加锁,资源抢夺的业务逻辑都交给服务器端处理,减少移动客户端的压力;

8.线程间通信

一个线程传递数据给另一个线程;

一个线程执行完任务,转到另一个线程继续执行任务;

线程之间常用的通信方法

1 - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;
2 - (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait;

NSThread基础使用

时间: 2024-07-29 06:33:03

NSThread基础使用的相关文章

java web 开发三剑客 -------电子书

Internet,人们通常称为因特网,是当今世界上覆盖面最大和应用最广泛的网络.根据英语构词法,Internet是Inter + net,Inter-作为前缀在英语中表示“在一起,交互”,由此可知Internet的目的是让各个net交互.所以,Internet实质上是将世界上各个国家.各个网络运营商的多个网络相互连接构成的一个全球范围内的统一网,使各个网络之间能够相互到达.各个国家和运营商构建网络采用的底层技术和实现可能各不相同,但只要采用统一的上层协议(TCP/IP)就可以通过Internet

iOS面试必备-iOS基础知识

近期为准备找工作面试,在网络上搜集了这些题,以备面试之用. 插一条广告:本人求职,2016级应届毕业生,有开发经验.可独立开发,低薪求职.QQ:895193543 1.简述OC中内存管理机制. 答:内存管理机制:使用引用计数管理,分为ARC和MRC,MRC需要程序员自己管理内存,ARC则不需要.但是并不是 所有对象在ARC环境下均不需要管理内存,子线程和循环引用并不是这样.与retain配对使用的是release,retain代表引用计 数+1,release代表引用计数-1,当引用计数减为0时

Xcode及obj-c的基础知识

1, 从简单的例程来看基本语法: 下面的代码是通过OSX-Application-Command Line Tool生成的: #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... NSLog(@"Hello, World!"); NSLog(@"Hello, Objective-c&q

IOS基础面试题

最近离职了,找工作,光会做项目,对基础不熟,今天就总结了一点面试题. 废话不多说,上题吧: 1.objective-c中的数字对象都有哪些,简述它们与基本数据类型的区别是什么. 基本类型和C一样,主要是有int.long.double.float.char.void.bool.对于基本数据类型,不需要使用指针,NSNumber是OC的数字对象,需要考虑内存释放问题.数字类型有:NSInteger.CGFloat.数据对象有NSNumber.对象和变量的差别.可以拆装效果.其他的类型有NSStri

网络多线程(pthread , NSThread,GCD ,NSOperation)

在这里给大家介绍一些多线程的知识,以及应用,希望能给一些需要的朋友学习学习,如果有错误的地方,请帮忙指出,非常感谢. 那么先介绍多线程前,先说一下什么是线程,什么是进程? 进程:{ 1.正在运行的一个应用程序就叫进程. 2.每个进程之间都是相互独立的,每个进程都运行在自己独立的专用的且受保护的内存空间内. } 线程:{  1.线程是进程的基本执行单元. 2.每一个进程都默认开启一条线程,我们称之为主线程.(一个进程至少有一条线程) } 多线程:多线程就是一个进程可以开辟多线线程(子线程),同时执

Swift语法基础入门三(函数, 闭包)

Swift语法基础入门三(函数, 闭包) 函数: 函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标识函数做什么,并且当函数需要执行的时候,这个名字会被用于“调用”函数 格式: func 函数名称(参数名:参数类型, 参数名:参数类型...) -> 函数返回值 { 函数实现部分 } 没有参数没有返回值 可以写为 ->Void 可以写为 ->() 可以省略 Void.它其实是一个空的元组(tuple),没有任何元素,可以写成() func say() -> V

多线程基础(五)

5.多线程基础 线程间通信 什么叫线程间通信 在一个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另一个线程 在1个线程中执行完特定任务后, 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任务后,转到另1个线程继续执行任务 线程间通信常用方法  perform执行 selector选择器 - (void)performSelectorOnMainThread:(SEL)aSelectorwithObject:(id)ar

多线程基础(三)

3.多线程基础 NSThread的基本使用 如何使用NSThread创建新线程 创建线程之后是默认不执行的状态 创建三个线程: 通过name属性区别这些线程 接下来就是通过设置线程的优先级来设置线程的被使用频率的高低      不设置默认是0.5 第二种使用NSThread创建线程,分离出一条线程 没有返回值,就没有办法拿到这个线程对象,就没办法设置相关的属性 第三种方法:开启一条后台线程 优点:不需要手动开启,就是start 总结一下: 自定义线程: 重写dealloc方法,然后在deallo

iOS多线程的初步研究(一)-- NSThread

iOS多线程的初步研究(一)-- NSThread 对于多线程的开发,iOS系统提供了多种不同的接口,先谈谈iOS多线程最基础方面的使用.产生线程的方式姑且分两类,一类是显式调用,另一类是隐式调用. 一.显示调用的类为NSThread.一般构造NSThread的线程对象可通过两种方式: 1. 初始化线程主方法: [NSThread detachNewThreadSelector:@selector(run:) toTarget:target withObject:obj];//类方法 或 NST