iOS多线程实现1-pthread
1 操作系统、进程、线程简单介绍
现在的程序都是在操作系统上跑,很少有裸机的,而且大部分的嵌入式应用也都支持操作系统,当然还有一些很低端的嵌入式设备没有操作系统。
iPhone手机跑的是iOS操作系统(基于Unix改造),操作系统用来管理设备的硬件设备,提供接口API(驱动程序)供不同的APP来调用,从而实现操作硬件,比如通过网卡实现网络访问、相机实现拍照、集成声卡实现发音、蓝牙实现无线传输等等。这里的APP可以简单的理解为一个进程,比如qq、微信、淘宝等等。
在iOS系统中,一个应用程序只允许有一个进程。不过,大家可能见过下图,下拉菜单的"今天",以今日头条为例(简书啥时间也开发个)。"今天"这里的今日头条和我们home页上的是不是一个应用开启的两个进程呢?而且在AppStore下载的时候,只下载了一次,然后这里就有了,难道不是吗?
首先,"今天"里面显示的也是今日头条,也是随AppStore下载时一并下载下来的,不过它只是一个widget,可以理解为它是一个运行在"下拉菜单"这个进程里面的一个线程,如果"今天"被关闭了,那么widget也随之停止运行。
这个是iOS8之后才有的特性,官方叫做扩展(Extension)

每个进程都拥有独立的存储空间沙盒和内存空间,不同的进程之间的内存肯定是不能相互访问,而且存储空间也是不能相互访问的。不过,iOS8之后,苹果推出来App Groups,可以是应用和widget还有Applewatch直接通过[[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.xxx"]函数访问group的内存空间,还需要做一些设置

那我们面试的时候,或者平时提到的进程间通信是怎么回事呢?这个是苹果提供的scheme协议,如下:[[UIApplication sharedApplication] openURL:urlStr];
另外,安卓操作系统是允许多个进程的。
一个进程可以拥有多个线程,线程是真正执行程序流的执行单元。
2 pthread
一套通用的多线程API,采用C语言编写,跨平台\可移植,适用于Unix\Linux\Windows等系统,但是使用起来难度比较大,生命周期也是由程序员来管理。在iOS编程中很少使用这种方法。
#import <pthread.h>
/// 点击屏幕创建一个线程
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
pthread_t thread; //创建线程
NSString *str = @"helloWorld"; //创建参数
// 参数1 线程编号的地址
// 参数2 线程的属性
// 参数3 线程要执行的函数(函数指针)(第三个参数可以,demo,*demo, 一般用&demo)
// 参数4 线程要执行的函数的参数
int result = pthread_create(&thread, NULL, &demo, (__bridge void *)(str));
// __bridge oc类型到c语言类型的一个转换
// void *p = (__bridge void *)(str);
NSLog(@"over %d",result);
} /// 线程要执行的函数 传参数
void *(demo)(void *param){
NSString *str = (__bridge NSString *)(param);
NSLog(@"%@",str);
return NULL;
}
iOS多线程实现1-pthread的更多相关文章
- [iOS 多线程 & 网络 - 1.0] - 多线程概述
A.进程 什么是进程进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过"活 ...
- iOS 多线程:『RunLoop』详尽总结
1. RunLoop 简介 1.1 什么是 RunLoop? 可以理解为字面意思:Run 表示运行,Loop 表示循环.结合在一起就是运行的循环的意思.哈哈,我更愿意翻译为『跑圈』.直观理解就像是不停 ...
- iOS多线程与网络开发之多线程概述
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...
- iOS多线程技术方案
iOS多线程技术方案 目录 一.多线程简介 1.多线程的由来 2.耗时操作的模拟试验 3.进程和线程 4.多线程的概念及原理 5.多线程的优缺点和一个Tip 6.主线程 7.技术方案 二.Pthrea ...
- iOS多线程学习
在 iOS 中其实目前有 4 套多线程方案,他们分别是: Pthreads NSThread GCD NSOperation & NSOperationQueue 所以接下来,我会一一讲解这些 ...
- iOS多线程
关于iOS多线程 概述 这篇文章中,我不会说多线程是什么.线程和进程的区别.多线程有什么用,当然我也不会说什么是串行.什么是并行等问题,这些我们应该都知道的. 在 iOS 中其实目前有 4 套多线程方 ...
- iOS多线程解析
在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项.当然也会给出几种多线程的案例,在实际使用中感受它们的区别.还有一点需要说明的是,这篇文章将会使用 Swift 和 ...
- 关于iOS多线程的总结
关于iOS多线程的总结 在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项.当然也会给出几种多线程的案例,在实际使用中感受它们的区别.还有一点需要说明的是,这篇 ...
- iOS多线程-01-pthread与NSTread
简介 恰当的使用多线程编程可以提供任务的执行效率和系统资源的利用率 多线程是为了提高资源利用率,和应用程序的响应速度,多个线程共享应用资源 每个应用程序都有一个主线程,通常用来做UI界面刷新等 比较耗 ...
- iOS多线程知识总结--GCD
iOS多线程知识总结--GCD 1. iOS中苹果提供4钟方案来帮助我们实现多线程: (1) 纯C语言的pthread,偏底层,需要程序员手动管理线程的生命周期,基本不用. (2) OC语言的NSTr ...
随机推荐
- JS魔法堂:彻底理解0.1 + 0.2 === 0.30000000000000004的背后
Brief 一天有个朋友问我“JS中计算0.7 * 180怎么会等于125.99999999998,坑也太多了吧!”那时我猜测是二进制表示数值时发生round-off error所导致,但并不清楚具体 ...
- 过滤eWebeditor等富文本中html标签,获得纯文本信息
/// <summary> /// 过滤html标签 /// </summary> /// <param name="Htmlstring">& ...
- Windows平台下使用ffmpeg和segmenter实现m3u8直播点播
1.安装windows media service 实现 流媒体服务器功能 2.windows media编码器 实现 直播推流 3.使用 vlc 将 mms://127.0.0.1/live ...
- Allok Video to FLV Converter 可以用的 FixFlash.exe
纸飞机 拷至 c:\windows\system32 ok 下载链接:http://pan.baidu.com/s/1eQwz0DO 软件下载:http://pan.baidu.com/s/1sjGv ...
- 一些sql二
1.说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)法一:select * into b from a where 1<>1(仅用于SQlServer)法二:sel ...
- WPF 将DLL嵌入EXE文件(安装包)
网上很多例子,各种套路,就是没有测试过. WPF 将DLL嵌入EXE文件的套路是这样的 1.将要引用的dll源文件添加到wpf 项目中,dll 的属性->生成操作为[嵌入的资源]. 2.监听 ...
- C#中在AxWebBrowser控件注入JS脚本的方法
/// <summary> /// 窗体加载 /// </summary> private void JS_Load(object sender, EventArgs e) { ...
- MySQL函数不能创建的解决方法
MySQL函数不能创建,是一个很麻烦的问题,下面就为您提供了一个解决此问题的方法,如果您也遇到过类似的问题,不妨一看. http://database.51cto.com/art/201010/229 ...
- android版高仿淘宝客户端源码V2.3
android版高仿淘宝客户端源码V2.3,这个版本我已经更新到2.3了,源码也上传到源码天堂那里了,大家可以看一下吧,该应用实现了我们常用的购物功能了,也就是在手机上进行网购的流程的,如查看产品(浏 ...
- 将AJAX返回值纵向排序赋值给Table标签
/*下面是所有拼接这个表的代码*/ 1 function HandelAjaxReturnDataForContentTable(data) { var shareHtml = "" ...