iOS学习系列之多线程—NSThread(一)

iOS线程模型

1

NSThread:objective-c线程库

2

Blocks/GCD: Blocks模式的线程池

3

NSOperationQueue: 线程池/线程队列

今天就先从NSThread学起吧!

NSThread

NSThread是轻量级的多线程开发,使用起来也并不复杂,但是使用NSThread需要自己管理线程生命周期。

1NSThread的初始化

/*

@method

@abstract 初始化方法

@discussion 创建线程之后就自动运行Selector方法

@param selector:线程执行的方法,这个selector最多只能接受一个参数

@param target:selector消息发送的对象

@param argument:传给Secletor的唯一参数,也可以为nil

@resault

*/

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

贴了段代码如下:

运行结果:

证明argument是传给Secletor的唯一参数。

//此方法需要创建后主动调用

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

[thread start];

//隐式创建线程的方法

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

2NSThread常用的操作

//获取当前线程

NSThread *current =[NSThread currentThread];

//获取主线程

NSThread *mainThread = [NSThread mainThread];

贴段代码:

打印:

PS:获取当前线程和主线程的方法,是获取执行当前方法对象的线程!

//暂停当前线程

1.[NSThread sleepForTimeInterval:10.0];

2.NSDate *date = [NSDate dateWithTimeInterval:2 sinceDate:[NSDate date]];

[NSThread sleepUntilDate:date];

PS:暂停线程的方法,是获取执行当前方法对象的线程!

//监听线程执行完成 关键字:NSThreadWillExitNotification

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(test:) name:NSThreadWillExitNotification object:nil];

贴段代码

结果:

3‍线程间的通信

//在指定线程上执行操作

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

//在主线程上执行操作

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

//在当前线程执行操作

- (id)performSelector:(SEL)aSelector withObject:(id)object;

本文分享自微信公众号 - iOS开发笔记(roclel)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-12-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

Windows SDK编程基本框架

在Windows平台下,最常见最流行的编程就是MFC编程了,在网上可以搜索出大把的MFC编程相关的文章,今天我们来讨论另外一种windows下的编程模式,即W...

357130
来自专栏ASP.NETCore

【干货】”首个“ .NET Core 验证码组件

众所周知,Dotnet Core目前没有图形API,以前的System.Drawing程序集并没有包含在Dotnet Core 1.0环境中。不过在dotne...

21140
来自专栏walterlv - 吕毅的博客

如何编写基于 Microsoft.NET.Sdk 的跨平台的 MSBuild Target(附各种自带的 Task)

发布于 2018-05-20 11:00 更新于 2018-07...

15910
来自专栏葡萄城控件技术团队

ASP.NET AJAX UpdatePanel 控件实现剖析

使用ASP.NET AJAX框架我们可以搭建快速响应、具有丰富的用户体验的AJAX Web应用程序,而该框架的UpdatePanel控件则提供了一种非常简单的方...

455100
来自专栏DannyHoo的专栏

iOS开发中在指定的某些线程执行完之后去执行其他线程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

15530
来自专栏张善友的专栏

SignalR QuickStart

SignalR 是一个集成的客户端与服务器库,基于浏览器的客户端和基于 ASP.NET 的服务器组件可以借助它来进行双向多步对话。 换句话说,该对话可不受限制地...

24560
来自专栏我和未来有约会

silverlight.js详解.

原文:Understanding the silverlight.js helper class and silverlight object creation...

23960
来自专栏TechBox

GCD信号量-dispatch_semaphore_t

35310
来自专栏王大锤

再谈RunLoop

15630
来自专栏NetCore

[原创]Fluent NHibernate之旅(四)-- 关系(上)

经过了前面三篇的介绍,相信大家对Fluent NHibernate已经有一定的了解了,在我们学习中,Fluent 也已经进入了RTM版本。这次的版本发布离RC版...

23360

扫码关注云+社区

领取腾讯云代金券