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. SQL Server 2008 FILESTREAM特性管理文件

    在SQL Server 2008中,新的FILESTREAM(文件流)特性和varbinary列配合,你可以在服务器的文件系统上存储真实的数据,但可以在数据库上下文内管理和访问,这个特性让SQL Se ...

  2. Winform开发框架之客户关系管理系统(CRM)的报价单和销售单的处理

    在前面介绍了很多CRM相关的界面和实现思路的随笔文章,本篇继续介绍一下系统中用到的一些经验和技巧片段.本篇随笔主要介绍客户关系管理系统(CRM)的报价单和销售单的处理界面效果,使用列表内置的选择代替弹 ...

  3. AEAI ESB V3.5.4开源发布,应用集成平台

    AEAI ESB 应用集成平台为数通畅联的核心产品,本着分享传递的理念,数通畅联将ESB管理控制台项目开源,目的在于满足客户与伙伴的OEM需求,以及为广大IT爱好者的集成工具提供多一种选择,多一种便利 ...

  4. sencha panel的头header上添加刷新按钮

    var plet3=Ext.create('portaltest3.view.Portlet',                   { title: '提醒',                   ...

  5. Dev-Cpp配置OpenGL图形库(成功版本:Dev-Cpp 5.7.1 MinGW 4.8.1)

    ★配置前须知:Dev-Cpp自带OpenGL的使用和OpenGL简介 (附Dev-Cpp下载地址:http://sourceforge.net/projects/orwelldevcpp/?sourc ...

  6. Delphi又要换东家了

    前几天听到这个消息,搞个FMX出来,64位还没搞清楚,又开始折腾了!http://www.deltics.co.nz/blog/posts/2371 No Seriously – Let’s Buy ...

  7. Java的集合框架

    01.为什么要使用集合框架? 解析:如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象,那么可以使用Java集合框架. 如果启用集合的删除方法,那么集合中所有元素的索引会自动维护. 集合 ...

  8. C++ Const(常类型)的作用总结

    C++ Const的作用总结 面试或者工作中,我们经常遇到const修饰符定义的变量,函数和对象等.那么const的作用具体是什么,有哪些.今天自己好好的总结了一下,记录下来方便自己以后时间久了不记得 ...

  9. Webform(简单控件、复合控件)

    一.简单控件: 1.label控件 <asp:Label ID="Label1" runat="server" Text="账 号:" ...

  10. 如果一个游戏上面加一个透明层,js能不能实现 点击透明层的任意点 而正常玩游戏

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...