iOS多线程编程之一——NSThread线程管理

iOS多线程编程之一——NSThread线程管理

NSTread是iOS中进行多线程开发的一个类,其结构逻辑清晰,使用十分方便,但其封装度和性能不高,线程周期,加锁等需要手动处理。

一、NSThread类方法总结

获取当前线程

?


1

+ (NSThread *)currentThread;

这个方法通过开启一个新的线程执行选择器方法

?


1

+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument;

线程用法示例如下:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

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

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

        NSLog(@"%@=%d",[NSThread currentThread],i);

    }

}

-(void)log{

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

        NSLog(@"%@=%d",[NSThread currentThread],i);

    }

}

运行后的打印信息:

可以清晰的看出来,新启的线程和主线程是异步的。

程序是否是多线程执行

?


1

+ (BOOL)isMultiThreaded;

线程字典,我们可以为特殊的线程设置键值对

?


1

@property (readonly, retain) NSMutableDictionary *threadDictionary;

线程在某个时间执行

?


1

+ (void)sleepUntilDate:(NSDate *)date;

线程在等待一个时间间隔后执行

?


1

+ (void)sleepForTimeInterval:(NSTimeInterval)ti;

结束线程

?


1

+ (void)exit;

设置线程的优先级,取值的范围为0-1,1的优先级最高

?


1

2

+ (double)threadPriority;

+ (BOOL)setThreadPriority:(double)p;

这个属性是iOS8之后的新特性,将优先级更人性化的封装了起来

?


1

@property NSQualityOfService qualityOfService;

NSQualityOfService的枚举如下:

?


1

2

3

4

5

6

7

8

9

10

11

12

typedef NS_ENUM(NSInteger, NSQualityOfService) {

    //刷新UI级别的线程

    NSQualityOfServiceUserInteractive = 0x21,

    //用户请求的无需精确的任务的线程,例如点击加载邮件

    NSQualityOfServiceUserInitiated = 0x19,

    //周期性的任务线程,例如定时刷新

    NSQualityOfServiceUtility = 0x11,

    //后台任务的线程

    NSQualityOfServiceBackground = 0x09,

    //优先级未知的线程,优先级介于UserInteractive和Utility之间

    NSQualityOfServiceDefault = -1

};

判断是否是主线程

?


1

+ (BOOL)isMainThread;

获取主线程

?


1

+ (NSThread *)mainThread;

二、属性与成员方法总结

初始化方法,选择器可以带一个参数

?


1

- (instancetype)initWithTarget:(id)target selector:(SEL)selector object:(id)argument;

线程是否正在执行

?


1

@property (readonly, getter=isExecuting) BOOL executing;

线程是否已经执行结束

?


1

@property (readonly, getter=isFinished) BOOL finished;

线程是否已经取消执行

?


1

@property (readonly, getter=isCancelled) BOOL cancelled;

三、隐式的通过NSThread进行多线程编程

NSObject的一个类别中提供了支持多线程的方法,如下:

这个函数指定在主线程执行一个选择器,arg是参数,wait是是否立即执行,如果YES,则会阻塞当前主线程的任务,NO则会等待当前任务结束后执行。

?


1

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;

这个函数指定在某个线程执行选择器

?


1

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

指定在后台线程中执行选择器

?


1

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg;


时间: 2024-09-29 20:00:59

iOS多线程编程之一——NSThread线程管理的相关文章

iOS多线程编程之三——GCD的应用

iOS多线程编程之三--GCD的应用 一.引言 在软件开发中使用多线程可以大大的提升用户体验度,增加工作效率.iOS系统中提供了多种分线程编程的方法,在前两篇博客都有提及: NSThread类进行多线程编程:http://my.oschina.net/u/2340880/blog/416524. NSOperation进行多线程操作编程:http://my.oschina.net/u/2340880/blog/416782. 上两个进行多线程编程的机制都是封装于Object-C的类与方法.这篇博

iOS多线程编程之二——NSOperation与NSOperationQueue

iOS多线程编程之二--NSOperation与NSOperationQueue 一.NSOperation解析 NSOperation是基于Object-C封装的一套管理与执行线程操作的类.这个类是一个抽象类,通常情况下,我们会使用NSInvocationOperation和NSBlockOperation这两个子类进行多线程的开发,当然我们也可以写继承于NSOperation的类,封装我们自己的操作类. 1.NSOperation抽象类中提供的逻辑方法 操作开始执行 ? 1 - (void)

IOS多线程编程的3种实现方法_IOS

前言 在多线程简介中,我已经说明过了,为了提高界面的流畅度以及用户体验.我们务必要把耗时的操作放到别的线程中去执行,千万不要阻塞主线程. iOS中有以下3种多线程编程方法: NSThread Grand Centeral Dispatch(GCD) NSOperation和NSOperationQueue 1.NSThread 这是最轻量级的多线程的方法,使用起来最直观的多线程编程方法.但是因为需要自己管理线程的生命周期,线程同步.经常使用NSThread进行调试,在实际项目中不推荐使用. //

iOS多线程编程之NSThread的使用

1.简介: 1.1 iOS有三种多线程编程的技术,分别是: 1..NSThread  2.Cocoa NSOperation (iOS多线程编程之NSOperation和NSOperationQueue的使用) 3.GCD  全称:Grand Central Dispatch( iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用) 这三种编程方式从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,也是Apple最推荐使用的. 这篇我们主要介绍和使用NSThr

Java多线程编程基础之线程和多线程

[写在前面] 随着计算机技术的发展,编程模型也越来越复杂多样化.但多线程编程模型 是目前计算机系统架构的最终模型.随着CPU主频的不断攀升,X86架构的硬件已 经成为瓶,在这种架构的CPU主频最高为4G.事实上目前3.6G主频的CPU已经接近了顶峰. 如果不能从根本上更新当前CPU的架构(在很长一段时间内还不太可能),那么 继续提高CPU性能的方法就是超线程CPU模式.那么,作业系统.应用程序要发挥 CPU的最大性能,就是要改变到以多线程编程模型为主的并行处理系统和并发式 应用程序. 所以,掌握

Java多线程编程中synchronized线程同步的教程_java

0.关于线程同步 (1)为什么需要同步多线程?线程的同步是指让多个运行的线程在一起良好地协作,达到让多线程按要求合理地占用释放资源.我们采用Java中的同步代码块和同步方法达到这样的目的.比如这样的解决多线程无固定序执行的问题: public class TwoThreadTest { public static void main(String[] args) { Thread th1= new MyThread1(); Thread th2= new MyThread2(); th1.sta

详解Java多线程编程中的线程同步方法_java

1.多线程的同步: 1.1.同步机制:在多线程中,可能有多个线程试图访问一个有限的资源,必须预防这种情况的发生.所以引入了同步机制:在线程使用一个资源时为其加锁,这样其他的线程便不能访问那个资源了,直到解锁后才可以访问. 1.2.共享成员变量的例子:成员变量与局部变量: 成员变量: 如果一个变量是成员变量,那么多个线程对同一个对象的成员变量进行操作,这多个线程是共享一个成员变量的. 局部变量: 如果一个变量是局部变量,那么多个线程对同一个对象进行操作,每个线程都会有一个该局部变量的拷贝.他们之间

iOS多线程编程:线程同步总结 NSCondtion

问题描述 本帖最后由 jodies 于 2015-2-2 14:33 编辑 1:原子操作 - OSAtomic系列函数iOS平台下的原子操作函数都以OSAtomic开头,使用时需要包含头文件.不同线程如果通过原子操作函数对同一变量进行操作,可以保证一个线程的操作不会影响到其他线程内对此变量的操作,因为这些操作都是原子式的.因为原子操作只能对内置类型进行操作,所以原子操作能够同步的线程只能位于同一个进程的地址空间内.**2:锁 - NSLock系列对象**iOS平台下的锁对象为NSLock对象,进

iOS多线程编程之多社交平台同步推送的设计与实现

功能介绍 在开发快易博的时候,有一个功能叫做"分享心情"[见下图].它的主要功能是:用户可以一次发表一个微博(在人人网称之为新鲜事)到所有用户选择的绑定平台(其实就是通常所说的微博同步). 进入之后: 这个功能实现起来并不难,说白了就是依次调用各个开放平台的关于"发表"相关的API就好了.但牵扯到几个给用户提供更好的"用户体验"的需求,就不得不使用多线程了,需求如下: (1) 在图二对应的功能界面上,用户在发表完成之后,应该可以立即关闭: (2)