iOS进阶6--多线程学习

最新IOS开发学习资料整理(进阶必备) IOS学习资料,包含了入门、进阶、性能优化、面试和学习书籍 阅读详情

1.每个运行的app就是一个进程,每个进程之间都有独立的内存,防止各个进程之间数据共用,导致数据串改

2.每个进程中至少拥有一个线程(也称执行流),这个线程就是主线程,它负责UI的更新,线程与线程之间共用进程内存,所以多线程的难点就在于资源的共用上,它的目的就是提高资源的利用率,从而提升应用的效率,一个主线程拥有1M的堆栈内存,其它的线程都只有512K

3.开启线程是需要消耗内存的,所有不是线程开的越多就越好,这点和安卓的有区别

4.一个应用程序用的多线程的地方不是很多,也就是两三处,但遇到需要用到得地方就是个大问题,有时候更新UI的方法放在非主线程上运行就会报各种问题,无法具体定位分析

5.一般用到多线程的地方是下载,轮询,和共享资源的地方

6.异步情况下,线程数超过计算机核心数,CPU实际是分资源进行任务处理,线程不是同时进行的,所以开的线程越多,其实也会耗CPU,降低执行效率。

7.最好不要在主线程进行耗时的操作,当这个操作耗时太明显时,会造成页面卡顿,交互不畅等问题。



概念(转)

进程:正在进行中的程序被称为进程,负责程序运行的内存分配;每一个进程都有自己独立的虚拟内存空间
线程:线程是进程中一个独立的执行路径(控制单元);一个进程中至少包含一条线程,即主线程
 
队列 dispatch_queue_t,队列名称在调试时辅助,无论什么队列和任务,线程的创建和回收不需要 程序员操作,有队列负责。
  串行队列:队列中的任务只会顺序执行(类似跑步)

       dispatch_queue_t q = dispatch_queue_create(“....”, dispatch_queue_serial);

  并行队列: 队列中的任务通常会并发执行(类似赛跑) 

       dispatch_queue_t q = dispatch_queue_create("......", dispatch_queue_concurrent);

  全局队列:是 系统开发的,直接拿过来(get)用就可以;与并行队列类似,但调试时,无法确认操作所在队列 

       dispatch_queue_t q = dispatch_get_global_queue(dispatch_queue_priority_default, 0);

  主队列:每一个 应用开发程序对应唯一一个主队列,直接get即可;在多线程开发中,使用主队列更新ui

       dispatch_queue_t q = dispatch_get_main_queue();

操作
  dispatch_async 异步操作,会并发执行,无法确定任务的执行顺序;
  dispatch_sync 同步操作,会依次顺序执行,能够决定任务的执行顺序;
 
串行队列同步:操作不会新建线程、操作顺序执行
串行队列异步:操作需要一个子线程,会新建线程、线程的创建和回收不需要程序员参与,操作顺序执行,“最安全的选择”

 

并行队列同步:操作不会新建线程、操作顺序执行

并行队列异步:操作会新建多个线程(有多少任务,就开n个线程执行)、操作无序执行;队列前如果有其他任务,会等待前面的任务完成之后再执行;场景:既不影响主线程,又不需要顺序执行的操作!

 

全局队列异步:操作会新建多个线程、操作无序执行,队列前如果有其他任务,会等待前面的任务完成之后再执行

全局队列同步:操作不会新建线程、操作顺序执行

 

主队列异步:操作都应该在主线程上顺序执行的,不存在


异步的概念

主队列同步:如果把主线程中的操作看成一个大的block,那么除非主线程被用户杀掉,否则永远不会结束;主队列中添加的同步操作永远不会被执行,会死锁

 
不同队列嵌套dispathch_sync(同步)任务的结果

// 1.全局队列,都在主线程上执行,不会死锁 dispatch_queue_priority_default

dispatch_queue_t q = dispatch_get_global_queue(dispatch_queue_priority_default, 0);

// 2.并行队列,都在主线程上执行,不会死锁 dispatch_queue_concurrent

dispatch_queue_t q = dispatch_queue_create("cn.itcast.gcddemo", dispatch_queue_concurrent);

// 3.串行队列,会死锁,但是会执行嵌套同步操作之前的代码 dispatch_queue_serial

dispatch_queue_t q = dispatch_queue_create("cn.itcast.gcddemo", dispatch_queue_serial);

// 4.主队列,直接死锁 dispatch_get_main_queue();

dispatch_queue_t q = dispatch_get_main_queue();

dispatch_sync(q, ^{

    nslog(@"同步任务 %@", [nsthread currentthread]);

    dispatch_sync(q, ^{

        nslog(@"同步任务 %@", [nsthread currentthread]);

    });

});

 

dispatch_sync同步应用开发场景

阻塞并行队列的执行,要求某一操作执行后再进行后续操作,如用户登录
确保块代码之外的局部变量确实被修改

dispatch_queue_t q = dispatch_queue_create("cn.itcast.gcddemo", dispatch_queue_concurrent);

__block bool logon = no;

dispatch_sync(q, ^{

    nslog(@"模拟耗时操作 %@", [nsthread currentthread]);

      [nsthread sleepfortimeinterval:2.0f];

    nslog(@"模拟耗时完成 %@", [nsthread currentthread]);

    logon = yes;

});

 

dispatch_async(q, ^{

       nslog(@"登录完成的处理 %@", [nsthread currentthread]);

});

 

ios三种多线程技术:
   1.nsthread
    (1)使用nsthread对象建立一个线程非常方便
    (2)但是!要使用nsthread管理多个线程非常困难,不推荐使用
    (3)技巧!使用[nsthread currentthread]跟踪任务所在线程,适用于这三种技术
   2.nsoperation/nsoperationqueue
    (1)是使用gcd实现的一套objective-c的api
    (2)是 面向对象的线程技术
    (3)提供了一些在gcd中不容易实现的特性,如:限制最大并发数量、操作之间的依赖关系
   3.gcd —— grand central dispatch
    (1)是基于c语言的底层api
    (2)用block定义任务,使用起来非常灵活便捷
    (3)提供了更多的控制能力以及操作队列中所不能使用的底层函数
 

1---- 队列和线程的区别:

    队列:是管理线程的,相当于线程池,能管理线程什么时候执行。

    队列分为串行队列和并行队列等

    串行队列:队列中的线程按顺序执行(不会同时执行)

    并行队列:队列中的线程会并发执行,可能会有一个疑问,队列不是先进先出吗,如果后面的任务执行完了,怎么出去的了。这里需要强调下,任务执行完毕了,不一定出队列。只有前面的任务

<iframe id="iframeu1513126_0" src="http://pos.baidu.com/acom?rdid=1513126&amp;dc=2&amp;di=u1513126&amp;dri=0&amp;dis=0&amp;dai=4&amp;ps=2623x102&amp;dcb=BAIDU_EXP_UNION_define&amp;dtm=BAIDU_DUP_SETJSONADSLOT&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=661&amp;tpr=1453352561445&amp;ti=IOS%E5%A4%9A%E7%BA%BF%E7%A8%8B%E7%9F%A5%E8%AF%86%E6%80%BB%E7%BB%93%2F%E9%98%9F%E5%88%97%E6%A6%82%E5%BF%B5%2FGCD%2F%E4%B8%BB%E9%98%9F%E5%88%97%2F%E5%B9%B6%E8%A1%8C%E9%98%9F%E5%88%97%2F%E5%85%A8%E5%B1%80%E9%98%9F%E5%88%97%2F%E4%B8%BB%E9%98%9F%E5%88%97%2F%E4%B8%B2%E8%A1%8C%E9%98%9F%E5%88%97%2F%E5%90%8C%E6%AD%A5%E4%BB%BB%E5%8A%A1%2F%E5%BC%82%E6%AD%A5%E4%BB%BB%E5%8A%A1%E5%8C%BA%E5%88%AB%E9%99%84%E4%BB%A3%E7%A0%81%20-%20&amp;ari=1&amp;dbv=0&amp;drs=1&amp;pcs=1254x711&amp;pss=1254x2623&amp;cfv=20&amp;cpl=6&amp;chi=1&amp;cce=true&amp;cec=UTF-8&amp;tlm=1398480081&amp;ltu=http%3A%2F%2Fwww.makaidong.com%2F%25E5%258D%259A%25E5%25AE%25A2%25E5%259B%25AD%25E7%2583%25AD%2F32954.shtml&amp;ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DW382jLijRoWPlefWfPQZ91Cm1VzzU3lVPjRAqfpoo-dQXh6cRtBakIgnCqIcH82lJdrUvSENKVPN24_As_snUf_ziay0vyppBqqXjln4OZ7p9ldTFXhuQiFr50QhBbvJ%26wd%3D%26eqid%3Da0c1329f000198510000000256a05ba4&amp;ecd=1&amp;psr=1280x800&amp;par=1280x773&amp;pis=-1x-1&amp;ccd=24&amp;cja=true&amp;cmi=46&amp;col=zh-cn&amp;cdo=-1&amp;tcn=1453352562&amp;exps=110211&amp;qn=e85c44b069180a96&amp;tt=1453352561436.663.36173.36173&amp;feid=110211" width="640" height="60" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="margin: 0px; padding: 0px; border-width: 0px; outline: 0px; background-color: transparent; vertical-align: bottom;"></iframe>

此文来自: 马开东博客 转载请注明出处 网址:  http://www.makaidong.com

执行完了,才会出队列。

2----- 主线程队列和gcd创建的队列也是有区别的。

    主线程队列和gcd创建的队列是不同的。在gcd中创建的队列优先级没有主队列高,所以在gcd中的串行队列开启同步任务里面没有嵌套任务是不会阻塞主线程,只有一种可能导致死锁,就是串行队列里,嵌套开启任务,有可能会导致死锁。

    主线程队列中不能开启同步,会阻塞主线程。只能开启异步任务,开启异步任务也不会开启新的线程,只是降低异步任务的优先级,让cpu空闲的时候才去调用。而同步任务,会抢占主线程的资源,会造成死锁。 

 3----- 线程:里面有非常多的任务(同步,异步)

     同步与异步的区别:

    同步任务优先级高,在线程中有执行顺序,不会开启新的线程。

    异步任务优先级低,在线程中执行没有顺序,看cpu闲不闲。在主队列中不会开启新的线程,其他队列会开启新的线程。

4----主线程队列注意:

 下面代码执行顺序

 1111

 2222

 主队列异步 <nsthread: 0x8e12690>{name = (null), num = 1} 

 在主队列开启异步任务,不会开启新的线程而是依然在主线程中执行代码块中的代码。为什么不会阻塞线程?

 > 主队列开启异步任务,虽然不会开启新的线程,但是他会把异步任务降低优先级,等闲着的时候,就会在主线程上执行异步任务。

 在主队列开启同步任务,为什么会阻塞线程?

 > 在主队列开启同步任务,因为主队列是串行队列,里面的线程是有顺序的,先执行完一个线程才执行下一个线程,而主队列始终就只有一个主线程,主线程是不会执行完毕的,因为他是无限循环的,除非关闭应用开发程序。因此在主线程开启一个同步任务,同步任务会想抢占执行的资源,而主线程任务一直在执行某些操作,不肯放手。两个的优先级都很高,最终导致死锁,阻塞线程了。

 

/* 

  1.主队列

 */

- (void)main_queue_deadlock

{

     dispatch_queue_t q = dispatch_get_main_queue();

     nslog(@"1111");

    dispatch_async(q, ^{

        nslog(@"主队列异步任务 %@", [nsthread currentthread]);

    });  

    nslog(@"2222");

    // 下面会造成线程死锁

    //    dispatch_sync(q, ^{

    //        nslog(@"主队列同步 %@", [nsthread currentthread]);

    //    }); 

}

 

/**

 *  2.并行队列里开启同步任务是有执行顺序的,只有异步才没有顺序

 */

- (void)concurrent_queue

{

    dispatch_queue_t q = dispatch_queue_create("cn.itcast.gcddemo", dispatch_queue_concurrent);

    dispatch_sync(q, ^{

        nslog(@"同步任务 %@1111111", [nsthread currentthread]);

        

        dispatch_sync(q, ^{

            nslog(@"同步任务 %@2222222", [nsthread currentthread]);

        });

        dispatch_sync(q, ^{

            nslog(@"同步任务 %@333333", [nsthread currentthread]);

        }); 

    });

     dispatch_sync(q, ^{

        nslog(@"同步任务 %@444444", [nsthread currentthread]);

    });    

    dispatch_sync(q, ^{

        nslog(@"同步任务 %@555555", [nsthread currentthread]);

    });

    dispatch_sync(q, ^{

        nslog(@"同步任务 %@666666", [nsthread currentthread]);

    }); 

}

 

/**

 *  3.串行队列开启异步任务,是有顺序的

 */

- (void)serial_queue

{

    dispatch_queue_t q = dispatch_queue_create("cn.itcast.gcddemo", dispatch_queue_serial);

 

    dispatch_async(q, ^{

        nslog(@"异步任务 %@1111111", [nsthread currentthread]);

    });

    dispatch_async(q, ^{

        nslog(@"异步任务 %@22222", [nsthread currentthread]);

    });

    dispatch_async(q, ^{

        nslog(@"异步任务 %@3333", [nsthread currentthread]);

    });

    dispatch_async(q, ^{

        nslog(@"异步任务 %@44444", [nsthread currentthread]);

    });

}

 

/**

 *  4.1.串行队列开启异步任务后嵌套同步任务造成死锁

 */

- (void)serial_queue_deadlock2

{

    dispatch_queue_t q = dispatch_queue_create("cn.itcast.gcddemo", dispatch_queue_serial);

    dispatch_async(q, ^{

        nslog(@"异步任务 %@", [nsthread currentthread]);

        // 下面开启同步造成死锁:因为串行队列中线程是有执行顺序的,需要等上面开启的异步任务执行完毕,才会执行下面开启的同步任务。而上面的异步任务还没执行完,要到下面的大括号才算执行完毕,而下面的同步任务已经在抢占资源了,就会发生死锁。

        dispatch_sync(q, ^{

            nslog(@"同步任务 %@", [nsthread currentthread]);

        }); 

    });

}

 

/**

 *  4.2.串行队列开启同步任务后嵌套同步任务造成死锁

 */

- (void)serial_queue_deadlock1

{

    dispatch_queue_t q = dispatch_queue_create("cn.itcast.gcddemo", dispatch_queue_serial);

    dispatch_sync(q, ^{

        nslog(@"同步任务 %@", [nsthread currentthread]);

        // 下面开启同步造成死锁:因为串行队列中线程是有执行顺序的,需要等上面开启的同步任务执行完毕,才会执行下面开启的同步任务。而上面的同步任务还没执行完,要到下面的大括号才算执行完毕,而下面的同步任务已经在抢占资源了,就会发生死锁。

        dispatch_sync(q, ^{

            nslog(@"同步任务 %@", [nsthread currentthread]);

        });

        

    });

    nslog(@"同步任务 %@", [nsthread currentthread]);

}

 

/**

 *  4.3.串行队列开启同步任务后嵌套异步任务不造成死锁

 */

- (void)serial_queue1

{

    dispatch_queue_t q = dispatch_queue_create("cn.itcast.gcddemo", dispatch_queue_serial);

    dispatch_sync(q, ^{

        nslog(@"同步任务 %@", [nsthread currentthread]);

        

        // 开启异步,就会开启一个新的线程,不会阻塞线程

        dispatch_async(q, ^{

            nslog(@"异步任务 %@", [nsthread currentthread]);

        });

        

    });

iOS开发者进阶路线图 本文还有配套的精品资源,点击获取 简介:iOS开发涉及多种技术与工具的掌握,本学习路线旨在引导开发者从基础到精通。从Swift编程语言入门到高级特性,再到Xcode开发环境的使用、数据管理、App生命周期、多线程等核心技术点。继续深入UI设计、网络编程、通知、权限管理、测试与调试等领域。进阶学习包括SwiftUI、Combine、Core Animation、ARKit和G... 阅读详情

相关推荐

人类肠道微生物群落代谢建模

MICOMWeb 是款用户友好型网站,专为人类肠道微生物群落代谢建模设计。该网站旨在解决基因组尺度代谢模型(in silico)构建过程中的3大限制:① 使用 MICOM Python 包进行通量平衡分析时对用户 Python 编程知识的要求;② 支持预定义和用户自定义饮食,以生成专属代谢模型;③ 处理宏基因组鸟枪法测序或 16S 扩增子测序获得的真实丰度数据时,所需的高通量计算基础设施。本文展示了 MICOMWeb 的核心功能,用户可轻松开展虚拟实验,为3个已发表数据集的实验验证生成功能性假设。

多组・学・多组学 1170

IOS开发如何从入门进阶到实战

整理了IOS开发从入门到实战的学习资料。

m0_67537062的博客 2793

2023电赛B题实战解析:基于立创天空星开发板的同轴线缆长度与负载测量系统

本文详细解析了2023年全国大学生电子设计竞赛B题的实战方案,重点介绍了基于立创EDA天空星开发板(STM32F103)的同轴线缆长度与负载测量系统。文章深入剖析了两种核心测量方案,并推荐了更稳定易实现的NE555测电容法,提供了从硬件选型、电路设计到软件编程、参数标定的完整“施工图”,实测精度可达厘米级和皮法级,为电赛复现与高精度测量学习提供了清晰指导。

weixin_36303305的博客 232

IOS开发如何从入门进阶到高级

针对iOS开发的学习,不同阶段应采取不同的学习方式,以实现高效提升.本文将iOS开发的学习分为入门、实战、进阶三个阶段,下面分别详细介绍

2401_86900375的博客 1930

Pytorch版deeplabv3+环境配置训练自己的数据集

参考:https://blog.youkuaiyun.com/qq_36766560/article/details/110009622?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161594607816780266214828%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161594607816780266214828

Ring__Rain的博客 1万+

【matlab】MATLAB 变量详解与应用

在 MATLAB 中,变量可以通过赋值操作进行定义。例如,要定义一个名为xx = 10;在这个例子中,我们创建了一个名为x的变量,并将其赋值为 10。需要注意的是,MATLAB 是一种动态类型语言,因此不需要显式地声明变量的类型。变量名必须以字母开头。变量名可以包含字母、数字和下划线。变量名区分大小写。不要使用 MATLAB 中的关键字(如forif等)作为变量名。

小吴同学的博客 2213

IOS开发进阶学习资料(提升必备)

IOS学习资料,包含了入门、进阶、性能优化、面试和学习书籍

the_cleaner的博客 1757

MATLAB控制信号发生器(USB-GPIB-HS)GPIB仪器控制教程(含matlab代码)

自动化测试时需要自动产生信号,通过matlab控制信号发生器的频率与功率,以实现自动化信号生成输出

qq_43686057的博客 1606

iOS进阶面试题----多线程

1 多线程是什么  多线程是个复杂的概念,按字面意思是同步完成多项任务,提高了资源的使用效率,从硬件、操作系统、应用软件不同的角度去看,多线程被赋予不同的内涵,对于硬件,现在市面上多数的CPU都是多核的,多核的CPU运算多线程更为出色;从操作系统角度,是多任务,现在用的主流操作系统都是多任务的,可以以便听歌、一边写博客;对于应用来说,多线程可以让应用有更快的回应,可以在网络下载时,同时响应用户的

寻亚楠的专栏 6万+

华为无线AP+AC(ensp)

VLAN 100--192.168.100.0/24为AP的管理IP地址VLAN10--192.168.10.0/24为无线用户获取的IP地址在DHCP Server(LSW3)上查看地址分配情况。

abcdlalal的博客 1万+

台达PLC使用RS485Modbus指令通信

台达PLC,RS485,Modbus RTU,从站梯形图,0X01,0X02,0X05,CRC校验

lilililimu的博客 1万+

IOS开发学习资料集合(开发必备)

IOS学习资料,包含了入门、进阶、性能优化、面试和学习书籍

m0_67537062的博客 1万+

RK3576 Buildroot 双机 ADB 异常排障实录:同版 `boot.img`,一台可识别一台不可识别

进程在跑”不等于“USB 枚举成功”,adbd存活只是必要不充分条件。生产环境中的全局别名可能反向污染系统脚本。shell 命令替换中的字符串问题,必须做字节级验证(od -tx1相比“改环境规避”,核心脚本对输入做鲁棒处理更可长期维护。

小灰灰的博客 212

ios查看线程数量_iOS多线程进阶

.一.进程进程:是指在系统中正在运行的一个应用程序,每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内比如同时打开迅雷、Xcode,系统就会分别启动2个进程二.线程1.什么是线程?答:1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程),一个进程(程序)的所有任务都在线程中执行比如使用酷狗播放音乐、使用迅雷下载电影,都需要在线程中执行2.线程的串行<1>.1个...

weixin_39976081的博客 592

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

iOS进阶面试题-多线程部分

iOS面试题系列: iOS如何面试 iOS面试题(一) iOS基础面试题(二) iOS基础面试题(三) iOS基础面试题(四) iOS进阶面试题----Block部分 1 多线程是什么  多线程是个复杂的概念,按字面意思是同步完成多项任务,提高了资源的使用效率,从硬件、操作系统、应用软件不同的角度去看,多线程被赋予不同的内涵,对于硬件,现在市面上多数

hmxiao_1983的专栏 858

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

iOS进阶 - 多线程

1.进程与线程 进程: 1.进程是一个具有一定独立功能的程序关于某次数据集合的一次运行活动,它是操作系统分配资源的基本单元. 2.进程是指在系统中正在运行的一个应用程序,就是一段程序的执行过程,我们可以理解为手机上的一个app. 3.每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内,拥有独立运行所需的全部资源 线程 1.程序执行流的最小单元,线程是进程中的一个实体. 2.一个进程要想执行任务,必须至少有一条线程.应用程序启动的时候,系统会默认开启一条线程,也就是主线程 进程和

hiccuptang 692

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

2020年涨薪必看,iOS开发技术进阶栈!

序言 最近正在重新系统的进阶学习iOS,主要为了拓展技术深度;收集了一些自己认为不错的博客和资料和大家分享。 iOS抖音效果实现 1:iOS–抖音点赞动画实现 2:iOS–抖音的上下滑实现 3:iOS–抖音视频加载动画 4:iOS–抖音的转场动画 5:iOS–抖音滚动字幕 iOS音视频学习从零到整 1:音视频学习从零到整–(1) 2:音视频学习从零到整–(2) 3:音视频学习从零到整–(3)视频H...

D_猿员的博客 1278

ios开发进阶之多线程01 线程 GCD

一 多线程基础 什么是进程?进程是指在系统中正在运行的一个应用程序。 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内。 什么是线程?1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程)。 1个线程中任务的执行是串行的(执行完上一个才能执行下一个)。 什么是多线程?1个进程中可以开启多条线程,多条线程可以并行(同时)执行不同的任务。 线程可以并行, 但是每个线程中的任务还

IOS开发进阶之路 653

iOS开发的跳槽之路的心路历程分享(iOS进阶路线路)

序言 我相信很多人都在说,iOS行业不好了,iOS现在行情越来越难了,失业的人比找工作的人还要多。这是事实,物竞天择,优胜劣汰,我们一样适用于丛林法则。所以我们要不断学习,提升自己的技能,不仅仅专业方面,我们还要全面发展,努力提升自己价值与内涵,致力于成为我国乒乓球队员马龙–六边形战士,没有弱点。 事情我们要从两方面来看,我们也要看到这里面的机会,物依稀为贵,因为行业不好,致力于iOS开发的从业人员也会越来越少,而致力于iOS开发的人员也在无形的提高了自己的身价,所以从事iOS开发的你不要迷茫,而是不断的去

m0_60543356的博客 771

视频教程-iOS高级程序员进阶——多线程编程核心技术模式篇-iOS

iOS高级程序员进阶——多线程编程核心技术模式篇 目前就职于中国唯品会做iO...

weixin_34251168的博客 344

iOS进阶 - iOS如何监控崩溃

iOS进阶 - iOS如何监控崩溃 几种常见的崩溃 数组越界;给数组添加 nil; 多线程问题: 在子线程更新UI, 不同线程操作同一个数据。 主线程无响应:主线程超过系统规定时间无响应就会被 Watchdog 杀掉。 野指针:指针指向一个已删除的内存区域会出现野指针崩溃。 KVO 问题 后台任务超时 iOS 后台保活的五种方式 1. Background Mode App 审核时会提高对 A...

极客学伟的技术分享社区 2691

最近看的iOS的书籍(进阶)

1、Objective-C程序设计 很入门级,但是整理的很详细,也很系统,查缺补漏的利器。(在这里) 2、iOS开发进阶(唐巧) 大部分介绍了一些工具和一些开发技巧,这里就不方便放链接了。 3、Effective Objective-C 2.0  编写高质量iOS与OS X代码的52个有效方法 进阶神器,修改了我大部分的编程习惯,虽然有些还是不懂为什么要这么做,以待后续研究。(在这里)

u012091216的专栏 4504

iOS多线程

转载链接:https://github.com/leejtom/multiThreading iOS多线程(Pthread、NSThread、GCD、NSOperation) iOS多线程(Pthread、NSThread、GCD、NSOperation) 本文纯属个人读书笔记。 本文主要分为以下模块: 一、知识点二、线程的生命周期:新建 - 就绪 - 运行 - 阻塞 ...

weixin_30787531的博客 303

iOS开发进阶-实现多线程的3种方法

相关文章链接:1.多线程简介 2.实现多线程的3种方法(本文) ......待续 前言 在多线程简介中,我已经说明过了,为了提高界面的流畅度以及用户体验。我们务必要把耗时的操作放到别的线程中去执行,千万不要阻塞主线程。 iOS中有以下3种多线程编程方法: NSThread Grand Centeral Dispatch(GCD) NSOperation和NSOperationQueue 1.NSThread 这是最轻量级的多线程的方法,使用起来最直观的多线程编程方法。但是因为需要自己管理线程的生

feelinghappy的专栏 896

新手ios开发者需知的ios学习路线

相信查询这个的都是ios开发小白,也许网上流传的ios学习路线很多,但是这个绝对是小编自制的,适合多少开发小白的学习路线图 工具/原料 电脑 基础阶段 C语言基础系统与开发工具的基本使用、基本数据类型、判断与循环语句、函数与变量作用域 C语言进阶        基本运算与进制、基本算法、数组与指针、枚举、宏定义 Objective-C语言基础       ...

556

iOS学习路线图

一、iOS学习路线图 二、iOS学习路线图——视频篇         阶 段 学完后目标 知识点 配套学习资源(笔记+源码+PPT) 密码 基础阶段 学习周期:24天         学习后目标:        C语言与Objective-C语言的基本使用,能够很好的了解c语言面向过程的开发本质,objective-C面向对象的本质,能...

768
上一篇: iOS app 发布流程记录
下一篇: 添加一个c文件,编译报错
Even_DC
博客等级 码龄12年 18粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值