iOS 理解使用多线程技术之NSThread
2016-01-06 12:58
302 查看
在项目中,我们难免会用到多线程,使用多线程可以起到提高性能等的问题,今天我参考了网上的一些资料和自己查苹果文档,来说说这个NSThread的使用
一:多线程一共有三种方法,NSThread,NSOperation和GCD
今天着重讨论NSThread,后续再讨论NSOperation和GCD
这三种方法从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,也是Apple推荐使用的
NSThread:
优点:NSThread比其他两个更轻量级。
缺点:需要程序员来管理线程的生命周期,线程同步等。线程同步对数据的加锁会有一定的系统开销。
Cocoa operation:
优点:不需要关系线程管理,数据同步的事情,程序员自己可以专心来做自己需要执行的操作上。Cocoa operation 相关的类是NSOperation ,NSOperationQueue.NSOperation是一个抽象类,使用它必须用的子类,可以实现它或者使用它定义好的两个子类:NSInvocationOperation和NSBlockOperation.创建NSOperation子类的对象,把对象添加到NSOperationQueue中执行。
GCD:
GCD是一个替代诸如NSThread,NSOperationQueue,NSInvocationOperation等技术的很高效和强大的技术。
二:NSThread的使用
1.NSThread有两种直接创建方式:实例方法和类方法,如下:
- (instancetype)initWithTarget:(id)target selector:(SEL)selector object:(nullable
id)argument NS_AVAILABLE(10_5,
2_0);
+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(nullable
id)argument;
对上边参数的解释:
selector:线程执行的方法
target:selector消息发送的对象
argument:传输给target 的唯一参数,可以是nil.
第一种方法是先创建对象,然后再运行线程操作,在运行线程操作前可以设置线程的优先级等线程信息。这个其实就是程序猿开启线程,然后来做一些耗时操作,然后把更新UI这种操作再调用下边的方法让主线程来做,
[self performSelectorOnMainThread:<#(nonnull SEL)#> withObject:<#(nullable id)#> waitUntilDone:<#(BOOL)#>]
当然了,除了可以更新主线程的数据外,还可以来更新其它的线程,比如:
- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullable
id)arg waitUntilDone:(BOOL)wait
NS_AVAILABLE(10_5,
2_0);
一:多线程一共有三种方法,NSThread,NSOperation和GCD
今天着重讨论NSThread,后续再讨论NSOperation和GCD
这三种方法从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,也是Apple推荐使用的
NSThread:
优点:NSThread比其他两个更轻量级。
缺点:需要程序员来管理线程的生命周期,线程同步等。线程同步对数据的加锁会有一定的系统开销。
Cocoa operation:
优点:不需要关系线程管理,数据同步的事情,程序员自己可以专心来做自己需要执行的操作上。Cocoa operation 相关的类是NSOperation ,NSOperationQueue.NSOperation是一个抽象类,使用它必须用的子类,可以实现它或者使用它定义好的两个子类:NSInvocationOperation和NSBlockOperation.创建NSOperation子类的对象,把对象添加到NSOperationQueue中执行。
GCD:
GCD是一个替代诸如NSThread,NSOperationQueue,NSInvocationOperation等技术的很高效和强大的技术。
二:NSThread的使用
1.NSThread有两种直接创建方式:实例方法和类方法,如下:
- (instancetype)initWithTarget:(id)target selector:(SEL)selector object:(nullable
id)argument NS_AVAILABLE(10_5,
2_0);
+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(nullable
id)argument;
对上边参数的解释:
selector:线程执行的方法
target:selector消息发送的对象
argument:传输给target 的唯一参数,可以是nil.
第一种方法是先创建对象,然后再运行线程操作,在运行线程操作前可以设置线程的优先级等线程信息。这个其实就是程序猿开启线程,然后来做一些耗时操作,然后把更新UI这种操作再调用下边的方法让主线程来做,
[self performSelectorOnMainThread:<#(nonnull SEL)#> withObject:<#(nullable id)#> waitUntilDone:<#(BOOL)#>]
当然了,除了可以更新主线程的数据外,还可以来更新其它的线程,比如:
- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullable
id)arg waitUntilDone:(BOOL)wait
NS_AVAILABLE(10_5,
2_0);
相关文章推荐
- iOS开发:小技巧积累
- iOS崩溃日志分析
- iOS 实现拖动一个view
- iOS 中的延时操作方法
- 四种数据持久化方法 iOS开发
- 打印IOS设备内存使用情况
- DSP/BIOS详解入门
- 待整理.iOS 开发的技巧和提示
- iOS项目的目录结构和开发流程
- iOS 为github帐号添加SSH keys,往git上传代码,往cocoapod上传代码
- ios原生api识别二维码图片
- iOS中的KVO的简介与用法
- iOS处理大图片
- iOS支付宝客户端应用开发指南
- 昨天遇见一个 问题 支付宝回调后黑屏
- iOS正则表达式
- iOS 静态度制作方法详细
- IOS实现BLE后台通信
- IOS截屏,View截图的基本方法
- iOS正则表达式检验手机号,邮箱等