Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >实际开发中的多线程简单使用场景

实际开发中的多线程简单使用场景

作者头像
小蠢驴打代码
发布于 2018-05-24 05:05:08
发布于 2018-05-24 05:05:08
3.5K0
举报
文章被收录于专栏:小蠢驴iOS专题小蠢驴iOS专题

在这两年涌现了无数iOS开发者之后,iOS面试的难度以及通过率,似乎相较于其他行业都略显严峻,很多刚培训完的同学,甚至因为没有工作经验,而被绝大部分公司而拒绝,于是乎,很多人开始了部分的简历作假,其实他们也是很无奈,不这样的话连面试机会都没有,但是很多没有工作经验的同学,就算拿到了面试邀请,也往往不好通过,因为HR们都有一双火眼金睛。

而为了筛选掉一部分不合格的面试者,现在iOS的面试题,也经常出的让你猝不及防,比如一个简单的又特别常见的问题--“你在项目中,什么时候用到过多线程”,然后就能听到无数多的AFN请求数据,各种异步请求网络数据的答案,但是这个答案讲道理,比较粗糙,AFN确实有使用异步请求,但是我们在使用的时候,直接发送Post/Get请求就行了,异步开启子线程并不是我们操作的,而是AFN自己底层进行操作的! -->所以,如果答到AFN,恐怕不是最理想的答案。


模拟-发送AFN请求

如图,只是简单的Post请求操作,然后我们打开progress,这是AFN在发送请求的-->         Block{  xxx},我们未添加任何dispatch_asyn 或者 NSOperation 的情况下,通过打印 获取当前线程。

AFN执行过程的线程

如图,我们发现我们未使用异步发送请求的Post请求的前提下,AFN请求执行的线程并不是在主线程! --> 而是自己开了一个子线程,所以如果面试的时候回答 AFN,肯定就暴露了自己,因为AFN的异步请求并不是我们调用的!我们只是一句简单的Post请求代码。


华丽分割线 ---->那如何回答这个问题!

首先我想说的是,其实在实际开发中,用到多线程的最常见的就是发送网络请求获取数据的时候,因为这确实是一项耗时操作,但是因为有AFN在,所以我们处理网络请求其实很简单,异步处理是AFN底层做的,并不是我们做的事!这点定要切记!!

那我们有地方用到异步处理吗? 答案是有的!


处理图片的压缩的时候!

图片压缩处理

当有一定工作经验的移动应用开发工程师,在与产品经理夜以继日的撕逼生活中,潜意识的会对产品的用户体验比较上心,为了与产品经理之间友好相处(捷径-->少沟通!!),在开发中,对于性能优化只能说-->铭记于心。


压缩时间计算-->时间差:

NSDate* StartTime = [NSDate date];

//图片压缩代码

double deltaTime = [[NSDate date] timeIntervalSinceDate:StartTime];

NSLog(@"cost time = %f", deltaTime);


未开启异步压缩图片-耗时

开启异步压缩图片

上面2图所示,异步压缩的耗时,差不多是同步压缩效率的1000倍


同时,如果压缩超大图(比如20M的图片)-->压缩到500K,如果不开启子线程异步压缩,通过工具检测-->内存占用可能达到1G,这里由于我们常用的图,应该都是<2~3M,所有内存占用相对没耗时的差距这么明显,就不贴出来了。

-->1000倍的效率差距,异步压缩的作用性就出来了


进阶篇-->实际开发中的GCD使用!

主队列的异步执行

具体用法:实现图片轮播功能时,设置viewWillAppear 与 数据源方法的执行顺序问题!

-->用放大数倍数据源的方式(比如50倍),使用collectionView 的良好复用性,实现广告图片的无限轮播。

正常执行顺序

正常的执行顺序-->viewWillAppear(or viewDidLoad) --> tableView Delegate


使用主队列的异步-->实现数据源先执行,在执行viewWillAppear方法

主队列异步执行--执行顺序的改变

如图,我们会发现,tableView Delegate的方法,竟然走在了viewWillAppear 方法的前面!用这种方法,我们可以先设置tableView cell的count,再在viewWillAppear中实现滚动,可以完美实现 --> 广告图片无限轮播效果~


如图有小白想知道,如何用collectionView实现图片无限滚动的,我到时候简单讲解一下实现的原理,开源下简单功能的代码。

-->上面就是多线程在实际开发中的具体使用方式!切记不要说AFN!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.03.07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
iOS基础问答面试题连载(三)-附答案
2016-11-2319:56:15 发表评论 3,614℃热度 1.请简单说明多线程技术的优点和缺点? 2.请简单说明线程和进程,以及他们之间的关系? 3.请简单说明在iOS开发中有哪些多线程的实现方案? 4.请简单说明主线程的作用,以及使用注意点? 5.请简单列出NSThread线程的几种状态,并说明状态转换的逻辑? 6.请简单说明如何简单的解决多线程访问同一块资源造成的线程安全的问题,以及注意点? 7.请简单介绍下什么是原子和非原子属性? 8.请简单介绍下GCD这门技术? 9.请简
timhbw
2018/05/03
8940
iOS-多线程详解
欢迎大家指出文章中需要改正或者需要补充的地方,我会及时更新,非常感谢。 一. 多线程基础 1. 进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 2.线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程,称为主线程) 一个进程(程序)的所有任务都在线程中执行 3. 进程和线程的比较 1.线程是CPU调用(执行任务)的最小单位。 2.进程是CPU分配资源的最小单位。 3.一个进程中至少要有一个线程。 4
xx_Cc
2018/05/10
2.2K0
iOS 多线程总结
●进程是指在系统中正在运行的一个应用程序,就是一段程序的执行过程,我们可以理解为手机上的一个app。 ●每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内,拥有独立运行所需的全部资源。
赵哥窟
2019/09/27
7950
iOS面试题梳理(三)
在某个方法中 self.name = _name,name = _name 它 们有区别吗,为什么? 1.前者是存在内存管理的setter方法赋值,它会对_name对象进行保留或者拷贝操作,后者是普
Jacklin
2018/05/15
1.4K0
这里有一份BAT大厂Android面试超详细知识点,赶快收藏备战金九银十!
金九银十面试季,相信大家肯定急需一套Android面试宝典,今天小编就给大家准备了我珍藏已久的Android高阶面试宝典,一份超级详细的Android面试必备知识点,供大家学习 !
Android技术干货分享
2019/09/20
8550
这里有一份BAT大厂Android面试超详细知识点,赶快收藏备战金九银十!
阿里、字节:一套高效的iOS面试题( 多线程 GCD底层原理篇)
dispatch_group_create() + dispatch_group_wait()
会写bug的程序员
2020/06/18
4.9K0
阿里、字节:一套高效的iOS面试题( 多线程 GCD底层原理篇)
Qt 性能优化策略和技巧
在 Qt 开发中,性能优化是一个重要的环节,尤其是在处理复杂 UI、大量数据或高实时性要求的应用时。以下是一些常见的 Qt 性能优化策略和技巧,涵盖了 UI 渲染、内存管理、多线程、算法优化等方面。
数字孪生开发者
2025/02/17
3000
Qt 性能优化策略和技巧
iOS14开发-多线程
不论线程通过如何调度或线程如何交替执行,在不需要做任何干涉的情况下,其执行结果保持一致符合预期,则称之为线程安全。
YungFan
2021/06/08
1.5K0
iOS14开发-多线程
iOS多线程之GCD、OperationQueue 对比和实践记录
在计算的早期,计算机可以执行的最大工作量是由 CPU 的时钟速度决定的。但是随着技术的进步和处理器设计的紧凑化,热量和其他物理约束开始限制处理器的最大时钟速度。因此,芯片制造商寻找其他方法来提高芯片的总体性能。他们决定的解决方案是增加每个芯片上的处理器核心数量。通过增加内核的数量,一个单独的芯片可以每秒执行更多的指令,而不用增加 CPU 的速度或改变芯片的大小或热特性。唯一的问题是如何利用额外的内核。
woopDast1
2020/09/04
1.6K1
iOS多线程之GCD、OperationQueue 对比和实践记录
iOS多线程:『NSOperation、NSOperationQueue』详尽总结
https://juejin.im/post/5a9e57af6fb9a028df222555”
iOSSir
2019/06/14
1.3K0
iOS多线程:『NSOperation、NSOperationQueue』详尽总结
金九银十,2019 Android精选面试实战总结整理(含详细解析)
1:首先计算出 density,计算公式:当前设备屏幕总宽度(单位为像素)/ 设计图总宽度(单位为 dp) = densitydensity 的意思就是 1 dp 占当前设备多少像素计算density 的原因:在布局文件中填写的是什么单位,最后都会被转化为 px,系统就是通过上面的方法,将你在项目中任何地方填写的单位都转换为 px
Android技术干货分享
2019/10/11
6360
金九银十,2019 Android精选面试实战总结整理(含详细解析)
2019年面试实战总结,这些Android面试题你一定需要了解
1:首先计算出 density,计算公式:当前设备屏幕总宽度(单位为像素)/ 设计图总宽度(单位为 dp) = densitydensity 的意思就是 1 dp 占当前设备多少像素计算density 的原因:在布局文件中填写的是什么单位,最后都会被转化为 px,系统就是通过上面的方法,将你在项目中任何地方填写的单位都转换为 px
Android扫地僧
2020/03/19
8390
2019年面试实战总结,这些Android面试题你一定需要了解
六天完成一个简单iOS App - 第三天
第三天任务: 今天主要任务完成我的模块的搭建。 我的页面的搭建 清除缓存功能 方法抽取总结 我的页面的搭建 我们先来看一下我的界面内容 我的界面分析 通过上面图片可以看出,我的界面是一个非常简单的ta
xx_Cc
2018/05/10
9420
IOS开发之新浪围脖
  IOS开发和Web开发一样,网络请求方式包括Get和Post方式。Get和Post两者有和特点和区别,在本篇博客中不做过多的论述,本篇的重点在于如何GET数据和POST数据。下面还会提到如何在我们的项目中使用CocoaPods, CocoaPods的安装和使用教程请参考链接http://code4app.com/article/cocoapods-install-usage。上面详细的介绍了CocoaPods的安装过程和如何通过CocoaPods引入第三方类库。在本篇博客中提到CocoaPods,是因为
lizelu
2018/01/11
1.4K0
IOS开发之新浪围脖
iOS网络——NSURLSession详解及SDWebImage源码解析你要知道的NSURLSession都在这里
你要知道的NSURLSession都在这里 转载请注明出处 https://cloud.tencent.com/developer/user/1605429 本系列文章主要讲解iOS中网络请求类NSURLSession的使用方法进行详解,同时也会以此为扩展,讲解SDWebImage中图片下载功能的源码分析,讲解AFNetworking相关源码分析。本系列文章主要分为以下几篇进行讲解,读者可按需查阅。 iOS网络——NSURLSession详解及SDWebImage源码解析 iOS网络——SDWebImage
WWWWDotPNG
2018/04/10
3.1K0
iOS网络——NSURLSession详解及SDWebImage源码解析你要知道的NSURLSession都在这里
iOS开发之性能优化
性能问题的主要原因是什么,原因有相同的,也有不同的,但归根到底,不外乎内存使用、代码效率、合适的策略逻辑、代码质量、安装包体积这一类问题。
胖虎_callmeV
2019/03/23
1.1K0
iOS开发之性能优化
嗯,手搓一个TinyPng压缩图片的WebpackPlugin也SoEasy啦
曾经发表过一篇性能优化的文章《前端性能优化指南》,笔者总结了一些在项目开发过程中使用过的性能优化经验。说句真话,性能优化可能在面试过程中会有用,实际在项目开发过程中可能没几个同学会注意这些性能优化的细节。
JowayYoung
2020/08/06
9770
嗯,手搓一个TinyPng压缩图片的WebpackPlugin也SoEasy啦
鸿蒙APP的性能优化
鸿蒙(HarmonyOS)应用的性能优化是确保应用流畅运行、减少资源消耗和提升用户体验的关键步骤。以下是一些针对鸿蒙 APP 的性能优化策略和技巧,涵盖了 UI 渲染、内存管理、分布式任务调度、网络请求等方面。
数字孪生开发者
2025/02/20
2470
鸿蒙APP的性能优化
iOS,面试必看,最全梳理
目前形势,参加到iOS队伍的人是越来越多,甚至已经到供过于求了。今年,找过工作人可能会更深刻地体会到今年的就业形势不容乐观,加之,培训机构一火车地向用人单位输送iOS开发人员,打破了生态圈的动态平衡。矫情一下,言归正传,我奉献一下,为iOS应聘者梳理一下面试题,希望能助一臂之力!
Jacklin999
2018/09/12
1.3K0
iOS,面试必看,最全梳理
iOS多线程:『GCD』详尽总结
本文首发于我的个人博客:『不羁阁』 文章链接:传送门 本文更新时间:2018-02-24 10:07:40 感谢大家对这篇文章的喜欢和支持。为了不辜负大家的喜欢,也为了更好的让大家了解 iOS 多线程,以及 GCD 的相关知识,我对这篇文章进行了重新梳理,在原有文章的基础上修改了原文存在的问题,并增加了更多关于 GCD 相关知识和使用方法,希望大家能够喜欢这篇新文章。 本文用来介绍 iOS 多线程中 GCD 的相关知识以及使用方法。这大概是史上最详细、清晰的关于 GCD 的详细讲解+总结的文
程序员充电站
2018/05/31
1.1K0
推荐阅读
相关推荐
iOS基础问答面试题连载(三)-附答案
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档