郝萌主倾心贡献,尊重作者的劳动成果,请勿转载。

假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^

我要捐赠: 点击捐赠

Cocos2d-X源代码下载:点我传送

游戏官方下载:http://dwz.cn/RwTjl

游戏视频预览:http://dwz.cn/RzHHd

游戏开发博客:http://dwz.cn/RzJzI

游戏源代码传送http://dwz.cn/Nret1

A.NSThread的基本使用
1.创建和启动线程
一个NSThread对象就代表一条线程

创建、启动线程
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
[thread start];
// 线程一启动。就会在线程thread中运行self的run方法

主线程相关用法
+ (NSThread *)mainThread; // 获得主线程
- (BOOL)isMainThread; // 是否为主线程
+ (BOOL)isMainThread; // 是否为主线程

 
2.其它方法
获得当前线程
NSThread *current = [NSThread currentThread];

线程的调度优先级
+ (double)threadPriority;
+ (BOOL)setThreadPriority:(double)p;
- (double)threadPriority;
- (BOOL)setThreadPriority:(double)p;
调度优先级的取值范围是0.0 ~ 1.0,默认0.5,值越大,优先级越高

线程的名字
- (void)setName:(NSString *)n;
- (NSString *)name;

 
3.其它创建线程的方法
创建线程后自己主动启动线程
[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];

隐式创建并启动线程
[self performSelectorInBackground:@selector(run) withObject:nil];

上述2种创建线程方式的优缺点
长处:简单快捷
缺点:无法对线程进行更具体的设置

 
4.线程生命周期
 
5.控制线程转台
启动线程
- (void)start;
// 进入就绪状态 -> 运行状态。当线程任务运行完成。自己主动进入死亡状态

堵塞(暂停)线程
+ (void)sleepUntilDate:(NSDate *)date;
+ (void)sleepForTimeInterval:(NSTimeInterval)ti;
// 进入堵塞状态

强制停止线程
+ (void)exit;
// 进入死亡状态

注意:一旦线程停止(死亡)了。就不能再次开启任务

 
6.多线程的安全隐患
资源共享
1块资源可能会被多个线程共享。也就是多个线程可能会訪问同一块资源
比方多个线程訪问同一个对象、同一个变量、同一个文件

当多个线程訪问同一块资源时,非常easy引发数据错乱和数据安全问题

 
7.相互排斥锁(为了预防多线程的资源抢夺)
(1)相互排斥锁使用格式
@synchronized(锁对象) { // 须要锁定的代码  }
注意:锁定1份代码仅仅用1把锁,用多把锁是无效的

相互排斥锁的优缺点
长处:能有效防止因多线程抢夺资源造成的数据安全问题
缺点:须要消耗大量的CPU资源

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

相关专业术语:线程同步
线程同步的意思是:多条线程按顺序地运行任务
相互排斥锁。就是使用了线程同步技术

 
(2)加锁@synchronized
@property(nonatomic, strong) NSObject *lock;
self.lock = [[NSObject alloc] init]
@synchronized (self.lock){
...
}
注意:要用同一个“锁”,才干正确地锁住代码资源
 
长处:有效防止多线程抢夺资源
缺点:消耗大量CPU资源
 
事实上成员属性修饰符atomic就加锁,这是默认的
所以我们一般使用nonatomic。提高性能
 
尽量避免多线程抢夺资源
尽可能把抢夺资源的处理交给server端来处理
 
(3)关于atomic和nonatomic修饰符
OC在定义属性时有nonatomic和atomic两种选择
atomic:原子属性,为setter方法加锁(默认就是atomic)
nonatomic:非原子属性,不会为setter方法加锁

atomic加锁原理
@property (assign, atomic) int age;
- (void)setAge:(int)age
{
    @synchronized(self) {
        _age = age;
    }
}

 
(4)atomic vs nonatomic
nonatomic和atomic对照
atomic:线程安全。须要消耗大量的资源
nonatomic:非线程安全,适合内存小的移动设备

iOS开发的建议
全部属性都声明为nonatomic
尽量避免多线程抢夺同一块资源
尽量将加锁、资源抢夺的业务逻辑交给server端处理,减小移动client的压力

 
8.线程间通信
什么叫做线程间通信
在1个进程中。线程往往不是孤立存在的,多个线程之间须要经常进行通信

线程间通信的体现
1个线程传递数据给另1个线程
在1个线程中运行完特定任务后,转到另1个线程继续运行任务

线程间通信经常用法
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;
- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait;

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载。

假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^

我要捐赠: 点击捐赠

Cocos2d-X源代码下载:点我传送

游戏官方下载:http://dwz.cn/RwTjl

游戏视频预览:http://dwz.cn/RzHHd

游戏开发博客:http://dwz.cn/RzJzI

游戏源代码传送http://dwz.cn/Nret1

iOS多线程与网络开发之多线程NSThread的更多相关文章

  1. iOS多线程与网络开发之多线程概述

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...

  2. iOS多线程与网络开发之多线程GCD

    郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主.捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...

  3. iOS多线程与网络开发之发送接收server信息

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. (1).使用同步方法发送get请求(不经常使用) 2 /** 发送get消息 */ 3 - (void) testGet { 4 NSString *r ...

  4. iOS多线程与网络开发之解析json数据

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. // 同步发送信息 2 NSData *data = [NSURLConnection sendSynchronousRequest:request r ...

  5. iOS多线程与网络开发之小文件上传

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. /** 取得本地文件的MIMEType */ 2 - (void) getMIMEType { 3 // Socket 实现断点上传 4 5 //apa ...

  6. iOS开发之多线程技术(NSThread、OperationQueue、GCD)

    在前面的博客中如果用到了异步请求的话,也是用到的第三方的东西,没有正儿八经的用过iOS中多线程的东西.其实多线程的东西还是蛮重要的,如果对于之前学过操作系统的小伙伴来说,理解多线程的东西还是比较容易的 ...

  7. iOS开发之多线程(NSThread、NSOperation、GCD)

    整理一些多线程相关的知识. 并行 & 并发 1.并行:并行是相对于多核而言的,几个任务同时执行.2.并发:并发是相对于单核而言的,几个任务之间快速切换运行,看起来像是"同时" ...

  8. iOS开发——实战篇Swift篇&UItableView结合网络请求,多线程,数据解析,MVC实战

    UItableView结合网络请求,多线程,数据解析,MVC实战 学了这么久的swift都没有做过什么东西,今天就以自己的一个小小的联系,讲一下,怎么使用swift在实战中应用MVC,并且结合后面的高 ...

  9. iOS开发之多线程技术

    本篇争取一篇讲清讲透,依然将通过四大方面清晰的对iOS开发中多线程的用法进行详尽的讲解: 一.什么是多线程 1)多线程执行原理 2)线程与进程 3)多线程的优缺点 二.我们为什么要用多线程编程技术 三 ...

随机推荐

  1. jmeter用BeanShell调用jar包对HTTP请求中的参数进行MD5加密

    前提: eclipse.JDK.Jmeter 说明: 本文分为两部分进行配置说明 第一部分:编写JavaMD5加密脚本 第二部分:使用Jmeter的BeanShell进行验证 ************ ...

  2. 恢复二进制文件中的block符号表

    前篇博客中,使用 杨君的小黑屋 提供的工具恢复二进制文件的符号表,只恢复了函数的符号表,本篇讲述如何恢复block符号表,杨君的博客中使用IDA分析二进制文件,本篇则使用MacOS系统上体验也不错的H ...

  3. MacBook pro new 触控板手势及快捷键

    MacBook pro new 触控板手势:   显示桌面: 拇指+三指 向外张开 launchpad: 拇指+三指 向中间集中   正在运行的窗口:三指向上 应用浏览: 三指向下 窗口信息: 三指点 ...

  4. iOS 视频组件

    公司最近要在项目里新增一个随手拍的功能,所以呢我在网上找了个比较不错的demo,顺便研究了下它的代码结构.感谢大神的分享,如有侵权,请告知哦!

  5. Windows Server 2016 Essentials试用

    下载地址: Windows Server 2016 Essentials (x64) SHA-1:        6E1D1880873157ADCEF3D74363308A95DC89103D ed ...

  6. 在EntityFramework6中管理DbContext的正确方式——1考虑的关键点(外文翻译)

    (译者注:使用EF开发应用程序的一个难点就在于对其DbContext的生命周期管理,你的管理策略是否能很好的支持上层服务 使用独立事务,使用嵌套事务,并行执行,异步执行等需求? Mehdi El Gu ...

  7. hint.css使用说明

    GitHub:http://liu12fei08fei.github.io/html/1hint.html hint.css使用说明 用途 快速实现tooltips提示样式 相关资源 官方网站GitH ...

  8. 使用Bootstrap 3开发响应式网站实践05,使用Tab、Modal、Form展示内容,使用Popover、Tooltip展示提示信息

    本篇体验用Tab插件显示内容.Html部分为: <div class="row" id="moreInfo"> <div class=&quo ...

  9. jvm执行流程

    首先给一个简单的Java示例,源代码如下: public class Main { private static int size=1; public static void main(String  ...

  10. 使用POI操作Excel时对事先写入模板的公式强制执行

    场景:POI读取Excel模板. 当使用POI操作Excel时,发现由POI生成的公式能够在打开Excel是被执行, 而事先手工写入Excel模板文件的公式则不自动被调用,必须手动双击该Cell才能生 ...