文档章节

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

珲少
 珲少
发布于 2015/05/19 08:54
字数 713
阅读 929
收藏 30

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

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

一、NSThread类方法总结

获取当前线程

+ (NSThread *)currentThread;

 

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

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

线程用法示例如下:

- (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);
    }
}

运行后的打印信息:

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

 

程序是否是多线程执行

+ (BOOL)isMultiThreaded;

 

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

@property (readonly, retain) NSMutableDictionary *threadDictionary;

 

线程在某个时间执行

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

 

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

+ (void)sleepForTimeInterval:(NSTimeInterval)ti;

 

结束线程

+ (void)exit;

 

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

+ (double)threadPriority;
+ (BOOL)setThreadPriority:(double)p;

 

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

@property NSQualityOfService qualityOfService;

NSQualityOfService的枚举如下:

typedef NS_ENUM(NSInteger, NSQualityOfService) {
    //刷新UI级别的线程
    NSQualityOfServiceUserInteractive = 0x21,
    //用户请求的无需精确的任务的线程,例如点击加载邮件
    NSQualityOfServiceUserInitiated = 0x19,
    //周期性的任务线程,例如定时刷新
    NSQualityOfServiceUtility = 0x11,
    //后台任务的线程
    NSQualityOfServiceBackground = 0x09,
    //优先级未知的线程,优先级介于UserInteractive和Utility之间
    NSQualityOfServiceDefault = -1
};

 

判断是否是主线程

+ (BOOL)isMainThread;

 

获取主线程

+ (NSThread *)mainThread;

 

二、属性与成员方法总结

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

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

 

线程是否正在执行

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

 

线程是否已经执行结束

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

 

线程是否已经取消执行

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

 

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

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

 

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

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

 

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

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

 

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

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

专注技术,热爱生活,交流技术,也做朋友。

——珲少 QQ群:203317592

© 著作权归作者所有

珲少

珲少

粉丝 876
博文 390
码字总数 469911
作品 0
上海
iOS工程师
私信 提问
加载中

评论(2)

tanranran
tanranran
5
黎晓敏
黎晓敏
131313
关于iOS多线程,这边勉强可以看看(OC&Swift)

iOS开发多线程总是绕不过的坎,看了很多前辈们优秀的文章,如:关于iOS多线程,我说,你听,没准你就懂了!、谈iOS多线程(NSThread、NSOperation、GCD)编程、iOS多线程:『GCD』详尽总结、i...

Andy_Ron
2018/08/26
0
0
iOS多线程编程之NSThread的使用

iOS多线程编程之NSThread的使用 1、简介: 1.1 iOS有三种多线程编程的技术,分别是: 1.、NSThread 2、Cocoa NSOperation (iOS多线程编程之NSOperation和NSOperationQueue的使用) 3、GCD 全...

malawo
2013/09/05
0
0
iOS开发 多线程(二) NSThread的使用(转)

每个iOS应用程序都有个专门用来更新显示UI界面、处理用户的触摸事件的主线程,因此不能将其他太耗时的操作放在主线程中执行,不然会造成主线程堵塞(出现卡机现象),带来极坏的用户体验。一般...

神补刀
2015/08/18
0
0
iOS多线程编程之NSThread的使用

1、简介: 1.1 iOS有三种多线程编程的技术,分别是: 1.、NSThread 2、Cocoa NSOperation (iOS多线程编程之NSOperation和NSOperationQueue的使用) 3、GCD 全称:Grand Central Dispatch( ...

浪子艾菲儿
2013/05/02
0
0
iOS多线程编程之NSThread的使用

1、简介: 1.1 iOS有三种多线程编程的技术,分别是: 1.、NSThread 2、Cocoa NSOperation (iOS多线程编程之NSOperation和NSOperationQueue的使用) 3、GCD 全称:Grand Central Dispatch( ...

雾灵峰
2012/12/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nproc systemd on CentOS 7

Increasing nproc for processes launched by systemd on CentOS 7 Ask Question I have successfully increased the nofile and nproc value for the local users, but I couldn't find a p......

MtrS
今天
3
0
了解微信小程序下拉刷新功能

小程序提供了这个事件。 onPullDownRefresh() 监听用户下拉刷新事件。 如果要开启下拉刷新功能,要先到json配置: "enablePullDownRefresh":true 配置后下拉有反应了但是没有加载效果,在onP...

oixxan__
今天
2
0
springmvc java对象转json,上传下载(未完)拦截器Interceptor以及源码解析(未完待续)

package com.atguigu.my.controller;import java.util.Collection;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Contr......

architect刘源源
今天
32
0
[日更-2019.5.24、25、26] Android系统中的Binder通信机制分析(一)--servicemanager

声明 其实对于Android系统Binder通信的机制早就有分析的想法,记得去年6、7月份Mr.Deng离职期间约定一起对其进行研究的,但因为我个人问题没能实施这个计划,留下些许遗憾... 最近,刚好在做...

Captain_小馬佩德罗
昨天
24
0
聊聊dubbo的DataStore

序 本文主要研究一下dubbo的DataStore DataStore dubbo-2.7.2/dubbo-common/src/main/java/org/apache/dubbo/common/store/DataStore.java @SPI("simple")public interface DataStore { ......

go4it
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部