美文网首页
IOS 多线程 安全问题

IOS 多线程 安全问题

作者: 奋斗吧_程序猿 | 来源:发表于2018-06-05 16:43 被阅读17次

一.多线程概念


1.进程与线程的概念

1.1 进程的概念:一个正在运行的程序可以看做一个进程。一个进程是由一个线程或多个线程组成的。。进程只负责资源的调度和分配,线程才是程序真正的执行单元,负责代码的执行。

1.2线程的概念:

1.2.1单线程:每个正在运行的程序(即进程),至少包含一个线程,这个线程叫主线程。主线程在程序启动时被创建,用于执行main函数。只有一个主线程的程序,称作单线程程序。主线程负责执行程序的所有代码(UI展现以及刷新,网络请求,本地存储等等)。这些代码只能顺序执行,无法并发执行。

1.2.2多线程:拥有多个线程的程序,称作多线程程序。iOS允许用户自己开辟新的线程,相对于主线程来讲,这些线程,称作子线程。可以根据需要开辟若干子线程子线程和主线程是 都是 独立的运行单元,各自的执行互不影响,因此能够并发执行。

1.2.3 单线程和多线程的区别:单线程程序:只有一个线程,代码顺序执行,容易出现代码阻塞(页面假死)。多线程程序:有多个线程,线程间独立运行,能有效的避免代码阻塞,并且提高程序的运行性能。

注意:iOS中关于UI的添加和刷新必须在主线程中操作。因为子线程获取不了图形上下文。1.iOS中为了效率更高,多数线程是没有安全保证的,在子线程中刷新UI有可能会遇到不可预知的错误,2.在子线程中刷新UI,只有当前线程执行完成,才会刷新UI,和可能造成UI刷新不及时,影响用户体验,而且一般只有主线程才有UI刷新功能

2.多线程实现种类

主要由四种:NSThread、NSoperationQueue、NSobject、GCD

2.1 NSThread:属于轻量级多任务实现方式,可以更加只管的管理线程,需要管理线程的生命周期、同步、加锁问题,会导致一定的性能开销

2.1.1 先创建线程,再启动线程

```

// 1. 创建线程NSThread*thread = [[NSThreadalloc] initWithTarget:selfselector:@selector(run) object:nil];

// 2. 启动线程[thread start];

// 线程一启动,就会在线程thread中执行self的run方法

// 新线程调用方法,里边为需要执行的任务

- (void)run {NSLog(@"%@", [NSThreadcurrentThread]);}

```

相关文章

网友评论

      本文标题:IOS 多线程 安全问题

      本文链接:https://www.haomeiwen.com/subject/grgpsftx.html