iOS 记录

王巍

博客地址:OneV's Den 

git地址:onevcat (Wei Wang) · GitHub

江湖人称喵神,目前就职于line。喵神的博客涉及方面比较广, 有Obejctive-C, Swift, SwiftUI, Unity等等。博客内容很有深度,非常值得关注。

戴铭

博客地址:戴铭的博客 

git地址:ming1016 (戴铭) · GitHub

《iOS开发高手课》和《跟戴铭学iOS编程》作者,前滴滴出行技术专家。

郭曜源

博客地址:Garan no dou | 一只魔法师的工坊 

git地址:ibireme · GitHub

著名的YYKit作者,博客内容更多的是Obejctive-C相关, 其中有不少性能优化相关的,目前更新较少。

念茜

博客地址:念茜_【Android 系统与应用】,【iOS 应用程序开发】,【Qt 应用程序开发】-CSDN博客

安全大佬,博客内容包含iOS和安卓,主要是安全攻防方面,也包含一些其他技术内容。博客似乎搬家了,但没找到新的。

bang

博客地址:bang’s blog git地址:bang590 (bang) · GitHub

JSPatch作者。博客技术内容主要是Obejctive-C,目前更新也比较少。

Kenshincui

博客地址:https://www.cnblogs.com/kenshincui/

NSHipster

博客地址:NSHipster

博客内容内容较广,有Obejctive-C, Swift, CoCoa, Xcode等等。

唐巧

博客地址:唐巧的博客 

git地址:tangqiaoboy (Tang Qiao) · GitHub

就职于猿辅导,首届国内Swift开发者大会的组织者。博客更新率较高,但目前比较少涉及具体的技术问题。

黄文臣

博客地址:黄文臣_iOS开发详解,iOS进阶,Swift入门教程(1.0)-CSDN博客

抖音iOS架构师, 内容涉及iOS音视频,汇编,动画等方面。

李忠

博客地址:Limboy

来自蘑菇街,RAC实践的国内先驱者。博客更新率较高,但已经比较少涉及一些具体的技术问题。

萧宸宇

博客地址:Ewan's Blog

博客中内容涉及较广,其中包含了许多iOS开发的文章。

ina

博客地址:IAN博客 | 苹果技术分享网

iOS & macOS 开发者|独立博客博主

sunny

博客地址:sunnyxx的技术博客 

git地址:sunnyxx (Yuan Sun) · GitHub

博客目前已经很久不更新了,但有很多文章放到现在也值得一看。

阿毛

博客地址:https://xiangwangfeng.com/ 

git地址:xiangwangfeng (阿毛) · GitHub

Tualatrix Chou

博客地址:I'm TualatriX

王令天下的Blog

博客地址:码农人生

学习Flutter的同学可以关注一下。

码农人生

博客地址:码农人生

已经很久不更新,iOS音视频相关。

iOS 整体架构

iOS 整体框架及类继承框架图 - 简书

002-知识体系| iOS系统整体框架及类继承框架图-综述 - 掘金

001-知识体系|建立自己的iOS知识体系 - 掘金

  • Cocoa Touch Layer
    触摸层提供应用基础的关键技术支持和应用的外观。如NotificationCenter的本地通知和远程推送服务,iAd广告框架,GameKit游戏工具框架,消息UI框架,图片UI框架,地图框架,连接手表框架,UIKit框架、自动适配等等

  • Media Layer
    媒体层提供应用中视听方面的技术,如图形图像相关的CoreGraphics,CoreImage,GLKit,OpenGL ES,CoreText,ImageIO、QuartzCore等等。声音技术相关的CoreAudio,OpenAL,AVFoundation,视频相关的CoreMedia,Media Player框架,音视频传输的AirPlay框架等等

  • Core Services Layer
    系统服务层提供给应用所需要的基础的系统服务。如Accounts账户框架,广告框架,数据存储框架,网络连接框架,地理位置框架,运动框架等等。这些服务中的最核心的是CoreFoundation和Foundation框架,定义了所有应用使用的数据类型。CoreFoundation是基于C的一组接口,Foundation是对CoreFoundation的OC封装

  • Core OS Layer
    系统核心层包含大多数低级别接近硬件的功能,它所包含的框架常常被其它框架所使用。Accelerate框架包含数字信号,线性代数,图像处理的接口。针对所有的iOS设备硬件之间的差异做优化,保证写一次代码在所有iOS设备上高效运行。CoreBluetooth框架利用蓝牙和外设交互,包括扫描连接蓝牙设备,保存连接状态,断开连接,获取外设的数据或者给外设传输数据等等。Security框架提供管理证书,公钥和私钥信任策略,keychain,hash认证数字签名等等与安全相关的解决方案。

常用框架:

UIKit

Foundation

QuartzCore(CoreAnimation): 

iOS-UIView和CALayer的关系 - 简书

iOS 中 UIView 和 CALayer 的关系 - 掘金

使用UIView封装的方法进行动画设置固然十分方便,但是具体动画如何实现我们是不清楚的,而且上面的代码还有一些问题是无法解决的,例如:如何控制动画的暂停?如何进行动画的组合?。。。

这里就需要了解iOS的核心动画Core Animation(包含在Quartz Core框架中)。在iOS中核心动画分为几类:基础动画、关键帧动画、动画组、转场动画。

CoreGraphics

CoreImage

OpenGL ES

CoreTextCoreText实战讲解,手把手教你实现图文、点击高亮、自定义截断功能 - 掘金 

  • iOS提供了两套绘图框架,分别是UIBezierPath和Core Graphics。UIBezierPath属于UIKit。UIBezierPath是对Core Graphics框架的进一步封装。
  • OpenGL和Core Graphics都是绘图专用的API类族,调用图形处理器(GPU)进行图形的绘制和渲染。在架构上是平级的,相比UIkit更接近底层。

UIBezierPath用于创建基于矢量的路径,如圆形、椭圆形和矩形,或者由多个直线和曲线组成的形状。优势是方便,能用最少的代码得要想要的图形,并且不需要管理图形上下文、缓冲区等容易出问题的地方,只需要关注图形本身就行了。最主要的缺点是支持的效果有限,当需要实现一些复杂图形、复杂渐变效果的时候就无能为力了。

Core Graphics是基于Quartz框架的高保真输出2D图形的渲染引擎。可处理基于路径的绘图、抗锯齿渲染、多个图形叠加、多种颜色渐变、图像、颜色管理、PDF文档等。 Core Graphics提供了一套2D绘图功能的C语言API,使用C结构体和C的函数模拟了一套面向对象的编程机制。Core Graphics中没有OC的对象和方法。

无论图片、PDF还是视图的图层,都是由CoreGraphics框架完成绘制的。UIImage、UIBezierPath和NSString都提供了至少一种用于在drawRect:中绘图的方法,实现原理是将Core Graphics代码封装在其中,降低绘图难度。

OpenGL ES是直接操作GPU绘图,而Core Graphics框架是先把命令输入到CPU再调用GPU绘图。很明显OpenGL ES绘图的效率更高,使用OpenGL ES绘图也可以实现跨平台,而Core Graphics只能在iOS系统中使用。相比Core Graphics只支持2D绘图,OpenGL ES对2D\3D都有很好的支持。

可见OpenGL ES是全方面的碾压Core Graphics,但是除了特别大的图片运算需求外,我们很少使用OpenGL ES。其实上面的示例代码已经很好的说明了,绘制同一个图形UIBezierPath需要5行代码,Core Graphics需要10行代码,虽然Core Graphics明显比UIBezierPath工作量大,但还是同一个数量级的。而使用OpenGL ES绘制,算上Vertex Shader和Fragment Shader绘制一个图形要300~400行代码。整整增加了两个数量级。再加上调试、debug的工作量,就算有跨平台的加成也无法抵消增加的时间成本。想使用OpenGL进行绘图,基本上都需要二次封装,这也是为什么我们在绘图的时候一般首选Core Graphics。

性能优化

卡顿优化、内存优化、启动优化、包体积优化、CPU 占用率使用时崩溃率耗电量监控流量监控网络状况监控、等等

iOS 保持界面流畅的技巧 | Garan no dou

iOS - 性能优化 - 简书

iOS面试题:对程序性能的优化你有什么建议? - 简书

卡顿优化

 卡顿原因:iOS 保持界面流畅的技巧 | Garan no dou
iOS 底层 - 性能优化之CPU、GPU - 简书

iOS 底层原理 - 性能优化 - 知乎

优化方案:
CPU

  • 耗时操作放入子线程;如图片解码、尺寸计算、文本绘制等;
  • 控制线程的最大并发数量;
  • 提前计算好布局,在有需要的时候一次性调整对应属性,不要多次修改;
  • 尽量用轻量级的对象 如:不用处理事件的 UI 控件可以考虑使用 CALayer;
  • 不要频繁地调用 UIView 的相关属性 如:frame、bounds、transform 等;

GPU

  • 避免离屏渲染;
  • 减少视图层级;
  • 使用合适的图片格式和大小

离屏渲染(Off-Screen Rendering):

iOS 离屏渲染的研究 - 简书

指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。

设置了以下属性时,都会触发离屏绘制:

  • 遮罩:layer.mask
  • 圆角:同时设置 layer.masksToBounds = YESlayer.cornerRadius > 0,可以用 CoreGraphics 绘制裁剪圆角
  • 光栅化:layer.shouldRasterize = YES
  • 阴影:如果设置了 layer.shadowPath 不会产生离屏渲染
避免离屏渲染切圆角 

iOS-裁剪圆角方法汇总(五种) - 简书

iOS性能谈设置圆角的卡顿解决_weixin_30376509的博客-CSDN博客

[iOS] 图像处理 - 一种高效裁剪图片圆角的算法 - 简书

内存优化

深入探索 iOS 内存优化 - 掘金

内存分区

内存问题:内存泄露、野指针、内存溢出

内存问题定位调试: iOS 内存优化之工具介绍 - 掘金

图片内存优化:

1. 选择合适的图片渲染格式

  • iOS 默认创建的图片格式是 SRGB,每个像素点通常包括红、绿、蓝和 alpha 数据4个字节。而实际使用时,图像可能不需要这么多通道。
  • 使用 UIGraphicsBeginImageContextWithOptions 创建的格式固定是 SRGB,可以使用 UIGraphicsImageRenderer (iOS10之后)替代,会自动选择最合适的图像格式。

2. 图片读取

对于仅使用一次或是使用频率很低的大图片资源,使用了[UIImage imageNamed:]方法进行加载

图片的加载,有两种方式,一种是[UIImage imageNamed:],加载后系统会进行缓存,且没有API能够进行清理;另一种是[UIImage imageWithContentsOfFile:][[UIImage alloc] initWithContentsOfFile:],系统不会进行缓存处理,当图片没有再被引用时,其占用的内存会被彻底释放掉

3. 图片压缩,列表使用缩略图

4. 后台优化

  • 当应用切入后台时,图像默认还在内存中 ,可以在退到后台或view消失时从内存中移除图片,进入前台或view出现时再加载图片 (通过监听系统通知) 。

5. 向下采样

包体积优化

深入探索 iOS 包体积优化 - 掘金

iOS安装包大小优化 - 简书

iOS 优化IPA包体积(今日头条) - 简书

iOS 包体积优化方案 - 简书

正经分析iOS包大小优化

  • 编译项配置

  • 删除无用的资源

  • 尽量减少从库中引入的资源

  • 压缩 PNG 和 JPEG 文件

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: iOS内存管理版本记录如下: 1. iOS 2.0及更早版本:使用手动管理内存的方式。 2. iOS 3.0:引入了基于引用计数的自动内存管理,使用retain和release函数来增加或减少对象的引用计数。 3. iOS 5.0:引入了ARC(自动引用计数)机制,ARC会在编译时自动插入retain和release代码,减少手动管理内存的工作。 4. iOS 7.0:引入了内存诊断工具Memory Usage Report,可以监测App内存使用情况,帮助开发者优化内存管理。 5. iOS 8.0:引入了一些新的API,如NSCache和NSURLSession,使得内存管理更加方便和灵活。 6. iOS 11.0:引入了基于图片大小的UIImage渲染机制,减少了内存占用。 7. iOS 13.0:引入了叫做“Scene”的多任务环境,使得内存管理更加复杂,需要更加小心谨慎地处理内存问题。 总的来说,随着iOS版本的不断更新,内存管理的机制也在不断地完善和优化,使得iOS应用能够更加高效地使用内存,提高用户体验。 ### 回答2: iOS的内存管理是由操作系统自动管理的,在不同的版本中有所不同。 在iOS 5之前的版本中,内存管理主要依赖于手动管理引用计数(reference counting)来管理对象的生命周期。开发者需要手动调用retain和release方法来增加或减少对象的引用计数,以确保对象在不再需要时能够被正确释放。这种方式需要开发者非常谨慎地管理对象的引用,以避免内存泄漏或野指针等问题。 从iOS 5开始,iOS引入了自动引用计数(Automatic Reference Counting,ARC)的内存管理机制。ARC可以自动地插入retain、release和autorelease等方法的调用,使得开发者不再需要手动进行内存管理。开发者只需要关注对象的创建和使用,而不需要关心具体的内存管理细节。ARC减少了内存管理的工作量,提高了开发效率,并且减少了内存泄漏和野指针等问题的发生。不过,ARC并不是完全的自动化内存管理,开发者仍然需要遵循一些规则,比如避免循环引用等,以保证内存的正确释放。 随着iOS版本的不断更新,苹果不断改进和优化内存管理机制。每个新版本都带来了更好的性能和更高效的内存管理。开发者可以通过关注苹果的官方文档和开发者社区中的更新内容来了解每个版本中的具体变化和改进。 总结来说,iOS的内存管理从手动的引用计数到自动引用计数的演变,极大地简化了开发者的工作,并提高了应用的性能和稳定性。随着不断的改进和优化,iOS的内存管理会越来越高效和可靠。 ### 回答3: iOS内存管理版本记录是指苹果公司在不同版本的iOS操作系统中对于内存管理方面的改进和更新记录。随着iOS版本的不断迭代,苹果在内存管理方面进行了一系列的优化和改进,以提高系统的稳定性和性能。 首先,在早期的iOS版本中,苹果采用了手动内存管理的方式,即开发人员需要手动创建和释放内存,容易出现内存泄漏和内存溢出等问题。为了解决这些问题,苹果在iOS5版本中引入了自动引用计数(ARC)机制。ARC机制能够通过编译器自动生成内存管理代码,避免了手动管理内存带来的问题。 其次,iOS6版本引入了内存分页机制。这个机制能够将应用程序内存分成不同的页,将不常用的页置于闲置列表中,从而释放出更多的内存空间。这些闲置列表中的页能够在需要时快速恢复到内存中,减少了内存压力。 此外,iOS7版本中进一步提升了内存管理的能力。苹果在这个版本中引入了内存压缩技术,将内存中的数据进行压缩,从而提高了内存利用率。此外,iOS7还引入了资源清理功能,可以自动清理不再使用的资源,释放内存空间。 最后,在iOS13版本中,苹果进一步改进了内存管理策略。该版本中引入了后台内存优化功能,能够自动优化应用在后台运行时的内存占用,减少了后台应用对于系统内存的占用和影响。 综上所述,iOS内存管理版本记录反映了苹果在不同版本的iOS操作系统中对于内存管理方面的改进和优化。这些改进和优化使得iOS系统更加稳定和高效,并且提升了应用程序的性能和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值