1.创建和启动线程
 
一个NSThread对象就代表一条线程;
 
创建,启动线程
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
[thread start];
2.线程相关用法
 
主线程相关用法
 + (NSThread *)mainThread;
- (BOOL)isMainThread;
+ (BOOL)isMainThread;
获得当前线程
 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;
创建线程后自动启动线程
 [NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];
隐式创建线程并启动线程
 [self performSelectorInBackground:@selector(run) withObject:nil];
3.线程的五种状态
新建(New) 就绪(Runnable) 运行(Running) 阻塞(Blocked) 死亡(Dead)
 
4.控制线程状态
启动线程
 - (void)start;
阻塞线程
 + (void)sleepUntilDate:(NSDate *)date;
+ (void)sleepForTimeInterval:(NSTimeInterval)ti;
 
强制停止线程
 + (void)exit;
5.多线程的安全隐患
资源共享:多个线程访问同一块资源;
处理共享数据时很容易引发数据错乱和数据安全问题;
 
6.安全隐患解决--互斥锁
 
互斥锁使用格式:@synchroniazed(锁对象) { 代码 }
 
互斥锁的优缺点:
优点:能有效防止因多线程抢夺资源造成的数据安全问题;
缺点:大量消耗CPU资源;
 
互斥锁的使用前提:多条线程抢夺同一块资源;
 
相关术语:线程同步;
线程同步的含义:多条线程按顺序执行任务;
互斥锁就是使用了线程同步技术;
 
7.原子属性和非原子属性
 
OC在定义属性时有nonatomic和atomic两种选择:
atomic:原子属性,为setter方法加锁(默认就是atomic);
nonatomic:非原子属性,不会为setter方法加锁;
 
atomic加锁原理:
 @property (assign, atomic) int age;
- (void)setAge:(int)age
{
@synchronized(self) {
    _age = age;
  }
}
 
nonatomic和atomic对比
nonatomic:线程安全,需要消耗大量的资源;
atomic:线程不安全,适合内存较小的移动设备;
 
iOS的开发建议:
所有属性都定义为nonatomic;
尽量避免多线程抢夺同一块资源;
尽量将加锁,资源抢夺的业务逻辑都交给服务器端处理,减少移动客户端的压力;
 
8.线程间通信
 
一个线程传递数据给另一个线程;
一个线程执行完任务,转到另一个线程继续执行任务;
 
线程之间常用的通信方法
 - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;
- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait;

NSThread基础使用的更多相关文章

  1. 多线程基础(三)NSThread基础

    3.多线程基础 NSThread的基本使用   如何使用NSThread创建新线程 创建线程之后是默认不执行的状态 创建三个线程:   通过name属性区别这些线程 接下来就是通过设置线程的优先级来设 ...

  2. 多线程基础(五)NSThread线程通信

    5.多线程基础 线程间通信   什么叫线程间通信 在一个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信   线程间通信的体现 1个线程传递数据给另一个线程 在1个线程中执行完特定任务后, ...

  3. iOS-网络基础

    概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博.微信等,这些应用本身可能采用iOS开发,但是所有的数据支撑都是基于后台网络服务器的.如今,网络编程越来越普遍,孤立的应用通常是没有生命力 ...

  4. Xcode及obj-c的基础知识

    1, 从简单的例程来看基本语法: 下面的代码是通过OSX-Application-Command Line Tool生成的: #import <Foundation/Foundation.h&g ...

  5. IOS学习之路--OC的基础知识

    1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouc ...

  6. swift开发多线程篇 - 多线程基础

    swift开发多线程篇 - 多线程基础 iOS 的三种多线程技术 (1)NSThread  使用NSThread对象建立一个线程非常方便 但是!要使用NSThread管理多个线程非常困难,不推荐使用 ...

  7. IOS基础面试题

    最近离职了,找工作,光会做项目,对基础不熟,今天就总结了一点面试题. 废话不多说,上题吧: 1.objective-c中的数字对象都有哪些,简述它们与基本数据类型的区别是什么. 基本类型和C一样,主要 ...

  8. Runloop基础知识

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  9. IOS 多线程编程之Grand Central Dispatch(GCD)介绍和使用 多线程基础和练习

    介绍:前面内容源自网络 Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统.这建立在任务并行执行的线程池模式 ...

随机推荐

  1. .net中以传引用的方式 向方法中传参数

    CLR(CommonLanguageRuntime)公共语言运行时,允许以传引用而非传值的方式传递参数.在C#中,这是用关键字 out 和ref来做到的. 从CLR角度来看,这两个关键字没什么区别,生 ...

  2. C#中dategridview数据导出为excel文件

    先从数据库中获取数据,绑定在datagridview中,再从dategridview中导出为excel文件 1.新建窗体,把控件datagridview和按钮设置好,如图

  3. js用正则表达式验证用户和密码的安全性,生成随机验证码

    制作了一个表单,表单验证用户.密码.随机验证码 html页面

  4. PHP学习笔记:通过curl实现采集网站内容

    关于curl,请各位同学自行百度,我直接上案例. 首先开启你的curl拓展,在php.ini文件把curl拓展开启,即取消extension=php_curl.dll的分号. eg:利用curl采集网 ...

  5. Android开发 Failed to install *.apk on device 'emulator-5554': EOF

    在运行android 程序时出现这样的错误: Failed to install homework.apk on device 'emulator-5554': EOF java.io.IOExcep ...

  6. while循环语句的使用

    说明:先判断表达式,后执行语句,while循环称为当型循环. 如果指定的条件为真(表达式为非0)时,执行while语句中的内嵌语句. 格式:while (表达式)   //判断括号内表达式 真(tru ...

  7. SharePoint 2013 开启访问请求

    1.通常,我们进入SharePoint 2013站点,如果没权限会提示该站点未被共享,而没有切换账号或者申请访问,实在是很流氓:其实,SharePoint为我们提供了访问请求页面,但是可能需要手动开启 ...

  8. 独立博客开张!有关读书、GTD和IT方面的内容将发布在新网站上

    2015年自己建个独立博客http://www.shenlongbin.com,以后与读书.GTD和IT技术有关的主题都放在个人博客中,2015年计划基本制定,请移步到这里. 感谢博客园提供了如此优秀 ...

  9. 2014年听写VOA50篇

    在沪江英语的VOA听写栏目上听写完成50篇,听写笔记PDF. 103.VOASP.2014奥巴马国情咨文(1-3).mp3 104.VOASP.2014奥巴马国情咨文(2-3).mp3 105.VOA ...

  10. 安卓开发--android library projects cannot be launched错误

    最新因为学习,问技术友要了几个源代码,导入源代码的时候无法进行真机或者虚拟机测试. 原因:android library projects cannot be launched 百度了一下,解决方法很 ...