自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

转载 iOS列表性能优化之异步绘制

一、需求背景1、现状iOS所提供的UIKit框架,其工作基本是在主线程上进行,界面绘制、用户输入响应交互等等。当大量且频繁的绘制任务,以及各种业务逻辑同时放在主线程上完成时,便有可能造成界面卡顿,丢帧现象,即在16.7ms内未能完成1帧的绘制,帧率低于60fps黄金标准。目前常用的UITableView或UICollectionView,在大量复杂文本及图片内容填充后,如果没有优化处理,快速滑动的情况下易出现卡顿,流畅性差问题。2、需求不依赖任何第三方pod框架,主要从异步线程绘制、图片异步下载

2020-12-15 15:05:03 416

转载 iOS 性能优化(二)

卡顿产生的原因在VSync信号到来后,系统图形服务会通过CADisplayLink等机制通知App,App主线程开始在CPU中计算显示内容,比如视图的创建、布局计算、图片解码、文本绘制等。随后CPU会将计算好的内容提交到GPU去,由GPU进行变换、合成、渲染。随后GPU会把渲染结果提交到帧缓冲区去,等待下一次VSync信号到来时显示到屏幕上。由于垂直同步的机制,如果在一个VSync时间内,CPU或者GPU没有完成内容提交,则那一帧就会被丢弃,等待下一次机会再显示,而这时显示屏会保留之前的内容不变。这就

2020-12-15 14:19:54 254

转载 IOS 调用微信扫码二维码

微信已发展成一个庞大的生态系统,是生活、社交不可缺少的优秀产品。ios 开发中时常需要调用相关微信功能,扫码二维码等1.info.plist 添加白名单LSApplicationQueriesSchemes,如下图2.代码实现if let tmpurl = URL(string: "weixin://scanqrcode"){ //跳转扫一扫 if UIApplication.shared.canOpenURL(tmpur.

2020-12-14 15:03:37 3090

转载 iOS核心动画:图层的树状结构

这篇文章主要为大家详细介绍了iOSiOS核心动画:图层的树状结构,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。Core Animation其实是一个令人误解的命名。你可能认为它只是用来做动画的,但实际上它是从一个叫做Layer Kit这么一个不怎么和动画有关的名字演变而来,所以做动画这只是Core Animation特性的冰山一角。Core Animation是一个复合引擎,它的职责就是尽可能快地组合屏幕上不同的可视内容,这个内容是被分解成独立的图层,存储在一个叫做图层树的体系之中。于是这个树.

2020-12-12 15:22:41 236

转载 iOS面试题-Swift篇(二)

swift 中的闭包结构是什么样子的{ (参数列表) -> 返回值类型 in 函数体代码}什么是尾随闭包将一个很长的闭包表达式作为函数的最后一个实参使用尾随闭包可以增强函数的可读性尾随闭包是一个被书写在函数调用括号外面(后面)的闭包表达式// fn 就是一个尾随闭包参数func exec(v1: Int, v2: Int, fn: (Int, Int) -> Int) { print(fn(v1, v2))}// 调用exec(v1: 10, v2:

2020-12-12 12:43:24 396

转载 iOS面试题-Swift篇(一)

这篇文章主要介绍了iOS面试题-Swift篇,对大家的学习或者工作具有一定的参考学习价值,感兴趣的小伙伴们可以了解一下哦介绍SwiftSwift是苹果在2014年6月WWDC发布的全新编程语言,借鉴了JS,Python,C#,Ruby等语言特性,看上去偏脚本化,Swift 仍支持 cocoa touch 框架Swift的优点:Swift更加安全,它是类型安全的语言。Swift容易阅读,语法和文件结构简易化。Swift更易于维护,文件分离后结构更清晰。Swift代码更少,简洁的语法,可以省.

2020-12-11 19:52:07 447

转载 iOS KVO实现原理及使用

1、简介KVO(key-value observe)是在KVC的基础上实现的一种用于监听属性变化的设计模式;如果对某个类的某个属性设置了KVO,那么当这个属性发生变化时,就会触发监听方法,从而知道属性变化了。如果本类一个属性的改变会影响到其他多个属性的变化,我们也会经常自己重写这个属性的set方法,用来监听他的变化,但是如果不是本类的属性,我们就没办法重写其set方法了,这个时候KVO就可以上场了,其实KVO本质上也是重写set方法,而整个过程依赖于runtime才能实现。2、使用1)设置监听//

2020-12-11 16:31:47 215

转载 iOS KVO的基本使用

KVO : (Key - Value - Observer) 键值观察者,是观察者设计模式的一种具体实现(C层和M层的通信)KVO触发机制:一个对象(观察者),检测另一个对象(被观察者)的某属性是否发生变化,若被监测的属性发生了更改,会触发观察者的一个方法(方法名固定,类似代理方法)使用步骤:注册观察者(为被观察这指定观察者以及被观察者属性)实现回调方法触发回调方法移除观察者一般KVO奔溃的原因:被观察的对象销毁掉了(被观察的对象是一个局部变量)观察者被释放掉了,但是没有移除监.

2020-12-11 14:54:02 188

转载 iOS13 适配和Xcode11.0踩坑小结

这篇文章主要介绍了iOS13 适配和Xcode11.0踩坑小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧iOS13中presentViewController的问题更新了Xcode11.0 beta之后,在iOS13中运行代码发现presentViewController和之前弹出的样式不一样。会出现这种情况是主要是因为我们之前对UIViewController里面的一个属性,即modalPresentationStyl.

2020-12-10 20:43:01 209

转载 iOS 中事件的响应链和传递链

iOS事件链有两条:事件的响应链;Hit-Testing事件的传递链。这篇文章主要介绍了iOS 中事件的响应链和传递链,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下iOS事件链有两条:事件的响应链;Hit-Testing事件的传递链响应链:由离用户最近的view向系统传递。initial view –> super view –> …… –> view controller –> window –> Application –> AppDelegate.

2020-12-10 14:39:45 124

转载 swift的witness table

我们知道,执行方法时,首先要查找到正确的方法,然后执行.能够在编译期确定执行方法的方式叫做静态分派static dispatc,无法在编译期确定,只能在运行时去确定执行方法的分派方式叫做动态分派dynamic dispatch.静态分派更快,而且静态分派可以进行内联等进一步的优化操作,使得执行更快速,性能更高.但是对于多态的情况,我们不能在编译期确定最终的类型,这里就用到了dynamic dispatch动态分派.动态分派的实现是,每种类型都会创建一张表,表内是一个包含了方法指针的数组.对于类class

2020-12-09 15:53:46 683

转载 分析Swift性能高效的原因

绝大多数公司选择Swift语言开发iOS应用,主要原因是因为Swift相比Objc有更快的运行效率,更加安全的类型检测,更多现代语言的特性提升开发效率;这一系列的优点使Swift语言的热度越来越高。自从2014年Apple发布Swift语言以来,历时六年多,Swift已经发布到5.3版本,在5.0版本已经ABI stability,5.2版本也已经module stability,不管是语言还是基础库都日趋稳定,目前国内外大厂也都积极拥抱Swift阵营。大多数人知道Swift语言相比于Objc语言运.

2020-12-09 14:13:27 858

转载 iOS开发中内联函数(UIKIT_STATIC_INLINE)的使用

内联函数是一种小型函数,是以空间换效率的函数,功能较简单,即函数内部没有循环、开关语句等,内联函数的主要作用是在使用中取代宏定义的存在,它与宏定义的主要区别是它会进行类型检查.简单源码inline int foo (int a, int b) { return a + b;}inline是内联函数的关键字,表明后面的函数是一个内联函数,内联函数是c++的语法,所以函数按照c++函数的形式;在iOS中可以这样使用UIKIT_STATIC_INLINE CGRect CGFitRectMak.

2020-12-08 19:30:32 394

转载 iOS Reactive Cocoa使用浅析

Reactive Cocoa浅析ReactiveCocoa是响应式编程(FRP)在IOS中的一个实现框架1.什么是响应式编程推荐一个网址响应式编程(Reactive Programming)介绍,如果不太清楚,那么我们首先来了解一下其他的编程思想1.面向过程:“面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。“面向过程”也可称之为“面向记录”编程思想,他们不支持丰富的“面向对象”特性(比如继承、多态),并且它们不允许混合持久化状态和域逻辑。C语言就是一门面向过

2020-12-08 16:17:36 478

转载 ios分析:Crash文件 (二)

常见的Exception Type1. EXC_BAD_ACCESS此类型的Excpetion是我们最长碰到的Crash,通常用于访问了不改访问的内存导致。一般EXC_BAD_ACCESS后面的"()"还会带有补充信息。SIGSEGV: 通常由于重复释放对象导致,这种类型在切换了ARC以后应该已经很少见到了。SIGABRT: 收到Abort信号退出,通常Foundation库中的容器为了保护状态正常会做一些检测,例如插入nil到数组中等会遇到此类错误。SEGV:(Segmentation V

2020-12-07 17:59:22 126

转载 阿里、字节:一套高效的iOS面试题

简述笔者最近收集梳理了一些iOS相关的问题,其中大部分都是大厂面试或者面试其他人用到的,能命中大部分的面试和日常工作,更希望你可以用它来检验自己由于问题量太大,本文只是给了问题,希望发挥圈友的动手能力,自己去探索下,也可以在下方进行评论回复你的答案或者提出更高质量的问题!!!runtime相关问题runtime是iOS开发最核心的知识了,如果下面的问题都解决了,那么对runtime的理解已经很深了。 runtime已经开源了,这有一份别人调试好可运行的源码objc-runtime,也可以去官网找

2020-12-05 19:19:00 207

转载 iOS SwiftUI 颜色渐变填充效果的实现

这篇文章主要介绍了iOS SwiftUI 颜色渐变填充效果的实现,文中通过示例代码介绍的非常详细,需要的朋友们可以了解一下SwiftUI 为我们提供了各种梯度选项,所有这些选项都可以通过多种方式使用。Gradient 渐变器A color gradient represented as an array of color stops, each having a parametric location value.gradient是一组颜色的合集,每个颜色都忽略位置参数LinearGradie.

2020-12-05 17:01:01 650

转载 Swift 进阶 —— map 和 flatMap的使用

这篇文章主要介绍了Swift map和flatMap的相关资料,感兴趣的朋友可以了解下map 和 flatMap 主要分在集合上的使用和在可选类型上的使用,下面分别来看下。集合上使用 map 和 flatMap先看如下的代码:func getInfos(by name: String) -> [String] { if name == "Jack" { return ["Male", "25", "New York"] } else if name == .

2020-12-05 15:19:15 1050

转载 Flutter状态管理之Riverpod

前言最近一两个月在一些Flutter的话题中不断的见到了Riverpod这个关键词,细看后发现它是Flutter状态管理的一个新方式。Flutter的状态管理方式有很多,Redux、 Bloc、 MobX、Provider等等。单单一个Provider,我也见到了各种组合,例如ChangeNotifier + Provider / StateNotifier + Provider( + freezed)。各种方式各有千秋,我们根据自己的习惯和项目的情况去选择就好,这里不做讨论。本篇只是来介绍一下Rive

2020-12-04 22:24:35 504

转载 详解优化iOS程序性能的25个方法

本篇文章主要介绍了优化iOS程序性能的25个方法,感兴趣的小伙伴们可以了解一下1. 用ARC管理内存

2020-12-04 15:34:19 308

转载 Flutter事件分发源码剖析

这篇文章主要为大家详细介绍了Flutter事件分发源码剖析,感兴趣的小伙伴们可以参考一下。概述不管是原生Android、iOS还是JavaScript,只要是涉及手势交互都会有事件的分发处理。和原生Android、iOS的事件分发的步骤和原理一样,Flutter的事件分发总体也由手势触发、拦截和响应等几个部分构成。Flutter所有事件源头是 hooks.dart文件的_dispatchPointerDataPacket函数,通过拦截屏幕的点击、滑动等各种事件,进而分发给原生代码进行响应。如果你看.

2020-12-04 13:50:00 269

转载 iOS 的自动构建流程

前言一个对效率有追求的公司,都应该有一套自动构建系统。目前使用的这套 iOS 构建流程,经历 2 年的使用,基本稳定下来。这篇文章主要用来记录???? 目前自己使用的 Jenkins 打包????脚本。用来打包做类似事情的工具很多,更主要的是为什么使用自动构建:效率上,解放出开发人员的时间。也更方便其他同事使用。保证打包的标准,避免配置或环境问题,带来的失败。把事情做对,比做快更重要。权限安全上,通过构建系统集中管理,对于使用者来说是一个黑盒。项目流程上,便于有需求时做 Daily Bui

2020-12-03 15:06:44 368

转载 iOS 列表界面如何优雅实现模块化与动态化

|前言去年做了一个小组件,前些时间考虑到项目中可能会大规模实施,完善简化后新开了一个 repo: YBHandyList 。有些朋友抛出了 nimbus、IGListKit 等业界应用很广的库,前些时间网易工程师也推出了 M80TableViewComponent。理论上这些组件的原理大同小异,虽然它们各有优势,但却不太能满足笔者对架构清晰度的要求。本文分析 YBHandyList 的应用价值,希望能解开一些朋友的疑惑。|业务痛点iOS 界面开发中 UITableView / UICollecti

2020-12-03 13:53:16 460

转载 iOS性能优化(一)

CPU和GPU在屏幕成像的过程中,CPU和GPU起着至关重要的作用CPU(Central Processing Unit,中央处理器)对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码、图像的绘制(Core Graphics)GPU(Graphics Processing Unit,图形处理器)纹理的渲染在iOS中是双缓冲机制,有前帧缓存、后帧缓存卡顿解决的主要思路尽可能减少CPU、GPU资源消耗按照60FPS的刷帧率,每隔1

2020-12-02 22:37:32 232

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除