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. 基于Lumisoft.NET组件的SMTP账号登陆检测

    在邮件处理的方面,Lumisoft.NET可以说是非常不错的一个选择,我在前面几篇文章中都介绍过这个组件. 基于Lumisoft.NET组件开发碰到乱码等一些问题的解决 基于Lumisoft.NET组 ...

  2. 若干道Swift面试题

    1,说说你认识的Swift是什么?Swift是苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C共同运行于MAC OS和iOS平台,用于搭建基于苹果平台的应用程序. ...

  3. WdatePicker.js的使用方法

    WdatePicker.js的使用方法 摘自:http://www.cnblogs.com/wuchao/archive/2012/07/19/2599209.html 4. 日期范围限制 静态限制  ...

  4. sencha gridpanel改变单元格颜色

    标题列包含 审核通过则绿色,包含拒绝为红色: { xtype: 'gridcolumn', renderer: function(value, metaData, record, rowIndex, ...

  5. spring详解(1)

    1.  什么是spring? Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发 ...

  6. 泛函编程(12)-数据流-Stream

    在前面的章节中我们介绍了List,也讨论了List的数据结构和操作函数.List这个东西从外表看上去挺美,但在现实中使用起来却可能很不实在.为什么?有两方面:其一,我们可以发现所有List的操作都是在 ...

  7. mysql init-file参数中语句限制

    mysql 启动选项中的init-file文件的内容目测只能是dml语句,不能包含ddl,否则执行就会报错,但不影响启动本身..太扯了..

  8. 请用fontAwesome代替网页icon小图标

    1. 引言 网页小图标到处可见,如果一个网页都是干巴巴的文字和图片,而没有小图标,会显得非常简陋.下面的小图标,你是不是会经常用到? 你可能说——“我们用的都是彩色的,不是黑白的”——别着急,下面会讲 ...

  9. IOS6学习笔记(一)

    一.ARC 1.ARC环境下可以使用-(void)dealloc{};处理一些事情(比如移除KVO观察),但不要调用[super dealloc]; 2.ARC与非ARC混编要注意符合Cocoa命名约 ...

  10. JSDoc那些事

    几天工作上需要文档化一些Javascript东西,所以在找一些JS文档化工具,以下分析几种工具. 1.JSDoc-toolkit 一开始还想用这个工具,但后来在解析生成文档时候,出现了很严重的错误,还 ...