自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 OpenGL入门 -- 案例03:金字塔、六边形、圆环的绘制

本案例主要是对常见的图元连接方式的运用,常见图元连接方式见OpenGL的投影方式、固定着色器分类以及图元连接方式 最终效果:整体流程图如下:主要函数说明:Mian函数:函数入口ChangeSize函数:设置视口和投影方式SetupRC函数:顶点数据及图元连接方式RenderScene函数:图形绘制SpecialKeys函数:注册特殊键位的回调函数KeyPressFunc函数:注册空格键回调DrawWireFrameBatch函数:立体图形绘制以及描边ChangeSize函数

2020-07-19 17:41:36 706 1

原创 OpenGL入门 -- OpenGL的投影方式、固定着色器分类以及图元连接方式

OpenGL的投影方式投影方式使用场景方法说明正投影显示2D图形,都是一样大GLFrustum::SetOrthographic(GLfloat xMin, GLfloat xMax, GLfloat yMin, GLfloat yMax, GLfloat zMin, GLfloat zMax)3D投影显示3D图形,远小近大GLFrustum::SetPerspective(float fFov , float fAspect ,float fNear ,float f

2020-07-12 16:13:46 368

原创 OpenGL入门(三) -- OpenGL 渲染架构以及数据传递

OpenGL渲染架构OpenGL渲染架构如图所示:主要分为两个模块:Client(客户端):是指常见的iOS代码和OpenGL API,这部分在CPU中运行Server(服务端):OpenGL底层渲染处理,在GPU中运行客户端通过iOS代码调用OpenGL API方法,将图形渲染的相关数据通过通道传递到服务器中的顶点着色器和片元着色器,交由GPU处理。服务器通过从客户端通道接收到的传递的数据,交给相应的着色器渲染处理,并将最终结果渲染到屏幕上OpenGL数据传递通道从示意图上可以看出,

2020-07-12 00:48:25 504

原创 OpenGL入门 -- iOS 离屏渲染解读

离屏渲染问题是在面试中经常会被问到的一个问题,都知道设置layer圆角,会触发离屏渲染,那么只有设置圆角就会触发离屏渲染吗?那么,我们来写一段代码测试一下,是否是所有的圆角都会触发离屏渲染。我们定义几个不同情况的按钮,设置圆角,测试代码如下: //1.按钮存在背景图片 UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeCustom]; btn1.frame = CGRectMake(100, 80, 100, 100)

2020-07-11 23:22:45 234

原创 OpenGL入门 -- 屏幕卡顿/撕裂 及 渲染流程解读

屏幕卡顿/撕裂屏幕卡顿/撕裂 是指屏幕在显示图形图像时出现的一些显示异常的现象。撕裂:是图形图片显示错位掉帧:是重复显示同一帧图片数据那么为什么会出现这样的显示问题呢?接下来详细解说一下。在分析之前,先了解一下 CPU和GPU的一些知识,以及 屏幕成像 的演变过程CPU 和 GPUCPU:是整个计算机的运算核心和控制核心,处理复杂的逻辑和数据,依赖非常高,靠时间片切换实现并发GPU:绘图运算工作准用的微处理器,单元计算,高并发,依赖非常低屏幕成像计算机的显示方式是经过最开始的 随

2020-07-11 02:21:27 1887

原创 OpenGL入门(二)-- 案例:正方形键位控制

在上一篇已经了解三角形的绘制,本篇了解一下正方形的键位控制,经过上一篇的铺垫,那么正方形的绘制就变的很简单了,首先看一下效果:效果展示如下:具体流程如下:主要实现部分:绘制正方形特殊键移动控制绘制正方形其实正方形绘制,只需在三角形绘制的基础上做少许修改,便可。具体修改如下:定义顶点到中心点的距离,则 边长 = 2 * blockSize//blockSize 边长GLfloat blockSize = 0.1f;修改顶点数组//正方形的4个点坐标GLfloa.

2020-07-09 10:48:29 277

原创 OpenGL入门 -- 环境搭建

OpenGL入门 -- 环境搭建准备资源搭建OpenGL环境上一篇介绍一下OpenGL的专业名词的相关知识,本篇来详细的记录一下OpenGL的环境搭建,以及OpenGL中的“Hello Word”。准备资源搭建环境,需要以下准备资源,也可以通过链接下载。CLToolsglewlibGLTools.aOpenGL环境搭建资源:百度网盘链接 ,密码:at14。搭建OpenGL环境打开Xcode新建项目,选择macOS,选择APP添加OpenGL.framework和GLUT

2020-07-06 23:10:31 310

原创 OpenGL入门(一)-- 快速了解OpenGL常见的专业名词

OpenGL入门(一)-- 快速了解OpenGL常见的专业名词一. 图形API简介1. OpenGL2. OpenGL ES3. DirectX4. Metal图形`API`的左右二. OpenGL 专业名词解析1. OpenGL 状态机2. OpenGL 上下文 ( context )3. 渲染(Rendering)4. 顶点数组(VertexArray)& 顶点缓存区(VertexBuffer)5. 管线6. 固定管线 和 可编程管线7. 着色器(shader)8. 顶点着色器(VertexSh

2020-07-03 00:34:27 399

原创 CocoaPods 公用Pod库的创建

CocoaPods 公用Pod库的创建1. CocoaPods账户创建2. 创建库文件并上传到GitHub2.1 创建私有模板库2.2 创建模板库2.3 添加组件内容2.4 安装与测试本地库2.5 修改Specs并验证2.5 上传并打tag2.6 发布库的描述文件podspec给cocoapods3. 验证与维护1. CocoaPods账户创建注册trunkpod trunk register 邮箱 '用户名' --verbose注意:QQ邮箱可能收不到邮件,换了两个QQ邮箱,最终用了163邮箱

2020-06-26 18:32:30 275

原创 iOS底层探索--内存管理

iOS底层探索--内存管理1. 五大分区全局变量和局部变量在内存中是否有区别?有什么区别?Block中是否可以直接修改全局变量全局静态变量的修改2. TaggedPointer3.NONPOINTER_ISA的优化3. retain & release & retainCount & dealloc分析retain 和 release 分析RetainCount 分析dealloc分析4. 循环引用5. Timer循环引用的解决6. 自动释放池 AutoreleasePoolAuto

2020-05-31 01:07:51 510

原创 数据结构与算法--聊聊散列表查找

数据结构与算法--聊聊散列表查找前言1. 散列函数常见手段1.1 直接定值法:1.2 数字分析法:1.3 平方取中法1.4. 折叠法1.5. 除留余数发2. 散列冲突的解决2.1 开放定址法2.2 再散列函数发2.3. 链地址发2.4. 公共溢出法3. 散列表实现前言在日常的工作中,经常会接触到散列表、MD5算法、哈希表等一些技术,这些都是运用了散列技术。那么散列表是怎么查找的呢?怎么设计一个散列呢?接下来来聊聊散列表设计的常见手段和怎么解决散列冲突。1. 散列函数常见手段算列技术:记录的存储位置

2020-05-24 00:42:06 275

原创 数据结构与算法--聊聊那些常见的排序算法

数据结构与算法--聊聊那些常见的排序算法前言1. 冒泡排序2. 简单选择排序3. 直接插入排序4. 希尔排序5. 堆排序6. 归并排序7. 快速排序前言  在开发中会经常用到排序,经常用到排序比如:冒泡排序,选择排序,直接插入排序等。那什么是排序呢?这个其实都很熟悉了,其实排序还分为内排序和外排序内排序:在排序整个过程中,待排序的所有记录全部被放置在内存中外排序:由于排序的记录个数太多,不能同时放置在内存,整个排序过程需要在内外存 之间多次交换数据才能进⾏。常用的是内排序。接下来聊聊常见的排序算

2020-05-23 23:50:13 393

原创 数据结构与算法 -- 平衡二叉树的构建

数据结构与算法 -- 平衡二叉树的构建前言1. 平衡二叉树构建分析2. 平衡二叉树构建前言上一篇学习了一些常见的静态查找和动态查找中二叉搜索树的查找,插入和删除操作。在构建一个二叉搜索树的时候,假如给定的数据是一直递增的,那么就会一直存储在右子树上,构成一个斜树。这时在对其做查找时,效率一样很低。那么在构建二叉搜索树的时候,怎么解决这样问题呢?接下来我们介绍一下利用平衡二叉树解决二叉搜索树失衡的问题。1. 平衡二叉树构建分析平衡二叉树:是一种二叉排序树,其中每一个结点的左右子树的高度差至多等于1。

2020-05-22 16:56:24 6736 3

原创 数据结构与算法--关于查找的常见算法

数据结构与算法--关于查找的常见算法1. 静态查找1.1 顺序查找1.2 折半查找1.3 插值查找1.4 裴波拉契查找2. 动态查找(二叉搜索树)1. 静态查找静态查找包括:顺序查找、插值查找、二分查找、裴波拉契查找1.1 顺序查找顺序查找,又称为线性查找。是最基本的查找技术。其查找过程:从表中的第一个或者最后一个记录开始,逐个比较关键字和给定值。若相等,则查找成功,找到所查记录;如果查找完,关键字和给定值都不相等,则没有所查记录。代码实现:// a为数组,n为查找的数组个数,key为要查找的关

2020-05-21 00:14:18 506

原创 数据结构与算法--图的应用拓扑排序 & 关键路径

数据结构与算法--图的应用拓扑排序 & 关键路径1. 拓扑排序2. 关键路径1. 拓扑排序拓扑排序简介假设在如下面的一张 有向图 中,顶点表示活动,弧表示活动之间的优先关系,这样的 有向图 顶点表示活动网,我们称之为 AOV 网。  上面 AOV 网的路径为:V1 -> V2 -> V3 -> V4 -> V5 或者 V1 -> V2 -> V3 -> V4 -> V5设 G = (V,E)是一个具有 n个 顶点的 有向图,V 中

2020-05-19 19:33:13 347

原创 数据结构与算法--图的应用之最短路径

数据结构与算法--图的应用之最短路径前言1. Dijkstra 算法2. 佛洛依德(Floyd)算法前言  上一篇简单的介绍了图的应用之最小生成树的两种求解方法,本篇来了解一下关于 图的最短路径 的两种求解方法首先看下面的图,从上图中可以很直观的看出:最短路径:V0 -> V1 -> V2 -> V4 -> V3 -> V6 -> V7 -> V8最短路径权值和: 1 + 3 + 1 + 2 + 3 + 2 + 4 = 16那么最短路径怎么求解呢?接

2020-05-13 19:44:06 542

原创 iOS底层探索 -- 多线程

iOS底层探索 -- 多线程1. 多线程概念问题2. 多线程原理3. 端口通讯4. GCD 初探1. 多线程概念问题线程的定义线程是进程的基本单元,一个进程的所有任务都在线程中执行进程要想执行任务,必须得有线程,进程至少有有一条线程程序启动默认会开启一条线程,这条线程被称为主线程或者UI线程进程的定义进程是指在系统中正在运行的一个应用程序每个进程之间是互相独立的,每个进程均运行在其专用的且受保护的内存中进程和线程的关系地址空间:同一进程的线程共享本进程的地址空间,

2020-05-08 17:58:51 186

原创 数据结构与算法 -- 图的应用之最小生成树问题

数据结构与算法 -- 图的应用之最小生成树问题前言1.最小生成树问题2.最小生成树求解(普里姆(Prim)算法)2.最小生成树求解(克鲁斯卡尔算法)前言  前面对 图的存储 和 **图的遍历(广度优先/深度优先)**做了简单的学习和了解,本篇文章,学习一下最小生成树的问题,以及对应解决这个问题的两种算法 普里姆算法 和 克鲁斯卡尔算法1.最小生成树问题首先看下面一道面试题:假设目前有N...

2020-05-07 21:27:58 482

原创 数据结构与算法--图的遍历方式(深度遍历和广度遍历)

数据结构与算法--图的遍历方式(深度遍历和广度遍历)1. 图的深度优先遍历2. 图的广度优先遍历1. 图的深度优先遍历深度优先搜索算法:数据结构是栈。通过将顶点存入栈中,沿着路径探索顶点,存在新的相邻顶点就去访问邻接矩阵深度遍历思路:1.将图的顶点和边的信息输入到图结构中2.创建一个数组,用来标识顶点是否已经被遍历过3.初始化数组,将数组中元素置位 False4.选择顶点开始遍历(注...

2020-05-06 14:55:02 742

原创 数据结构与算法--图的存储方式

数据结构与算法--图的存储方式 1. 图的定义2. 图的存储2.1. 图的存储介绍2.2. 邻接矩阵2.3. 邻接表1. 图的定义定义:图是由顶点的有穷非空结合和顶点之间的集合组成,数据元素(顶点)之间具有任意关系,图中任意两个数据元素之间都可能相关各种图:无向图(顶点到顶点之间的边没有方向,则称这条边为无向边)有向图(若从顶点 到顶点 的边有方向,则称这条边为有向边,也称...

2020-05-06 12:40:12 302

原创 iOS底层探索 -- KVO探索

iOS底层探索 -- KVO探索前言1. KVO初探1.1 context 的作用1.2 自动观察1.3 多个因素影响1.4 可变数组的观察2. KVO 原理分析3. 自定义 KVO 思路4. KVO 函数式编程5. FBKVO 简单分析前言  上一篇学习了KVC键值编码的查找原理,而KVO(Key-Value Observing)在开发中也是用的比较多。本篇我们深入底层探索一下KVO的底层原...

2020-05-01 23:37:54 245

原创 iOS底层探索 -- KVC 底层原理分析

iOS底层探索 -- KVC 底层原理分析前言1.   KVC(Key-Value Coding)初探2.   KVC 深入2.1  访问对象属性2.2  访问集合属性2.3  集合运算符2.4  访问非对象属性2.5  属性验证2.6  KVC 取值和赋值原理前言  在日常的开发中,在对数据进行处理中,常常使用三方框架将其转换为模型 (model),以方便使用点语法进行调用。这些框架底层都是...

2020-05-01 00:30:43 372

原创 数据结构与算法 -- 哈夫曼树&哈夫曼编码

数据结构与算法 -- 哈夫曼树&哈夫曼编码前言1. 哈夫曼树2. 哈夫曼编码3. 哈夫曼树 & 哈夫曼编码 的实现前言  上一篇了解学习了线索化二叉树的一些知识,这一篇,对哈夫曼树和哈夫曼编码来做一个了解学习。首先,我们先看一个经典的问题,等级优秀良好中等及格不及格考分90 <= 分数 <= 10080 <= 分数 <...

2020-04-30 23:08:28 2753 1

原创 数据结构与算法--线索化二叉树

数据结构与算法--线索化二叉树前言1. 线索化二叉树初探2. 线索化二叉树实现前言  前一篇简单的对二叉树进行初探,简单的了解了一下二叉树的一些概念,和二叉树的 顺序存储 和 链式存储 以及二叉树的一些简单操作,和二叉树的几种遍历方式。这一篇,我们在对二叉树进行了解,假如这个二叉树有很多的叶子节点,那么叶子节点的左孩子和右孩子的指针空间是否会浪费呢?1. 线索化二叉树初探如开篇提到的,假如...

2020-04-29 17:43:47 308 1

原创 iOS -- 经典面试题

iOS -- 经典面试题1. `Runtime` 是什么?2. 方法的本质是什么?SEL是什么?IMP是什么?两者之间的关系是什么?3. 能否向编译后的得到的类中增加实例变量?能否向运行时创建的类添加实例变量?4. isKindOfClass 和 isMemberOfClass 的区别5. [self class] 和 [super class] 的区别6. weak 原理,weak 如何实现,为...

2020-04-27 18:11:56 276

原创 数据结构与算法--二叉树的顺序存储&链式存储

数据结构与算法--二叉树的顺序存储&链式存储1. 树的相关概念2. 二叉树的顺序存储2.1 顺序二叉树的基本操作2.2 二叉树的遍历3. 二叉树的链式存储3.1 链式二叉树的基本操作3.2 链式二叉树的遍历1. 树的相关概念根节点(Root):树的顶部节点子节点(Child):离开根节点时直接连接到另一个节点的节点。叶子节点(Leaf):没有子节点的节点边(Edge):一个节点与...

2020-04-27 11:35:13 884

原创 数据结构与算法 -- 字符串匹配 KMP算法

数据结构与算法 -- 字符串匹配 KMP算法字符串匹配KMP算法 原理next 数组的推导KMP 算法代码实现KMP 算法优化KMP 算法优化实现字符串匹配题目:给一个仅包含小写字母的字符串主串 S = abcacabdc,模式串 T = abd,请查找出模式串在主中第一次出现的位置;提示:主串和模式串均为小写字母KMP算法 原理对于这道算法题的解法,之前结束了BF算法和RK算法...

2020-04-26 15:32:42 352

原创 数据结构与算法--字符匹配 & 字符去重

数据结构与算法--字符匹配 & 字符去重1. 去除重复字母2. 字符串匹配2.1  BF算法-爆发匹配算法2.2  RK算法1. 去除重复字母题目给你一个仅包含小写字母的字符串,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)示例1:输入:"bcabc"输出:"abc"示例2:输入:"cbacdcbc"...

2020-04-24 13:23:00 324

原创 数据结构与算法--几个算法题目

数据结构与算法--几个常见算法题目1. 括号匹配检验2. 十进制转8进制3. 杨辉三角4.爬楼梯问题5. 每日温度问题6. 字符串编码问题1. 括号匹配检验题目:  假设表达式中允许包含两种括号:圆括号与方括号,其嵌套顺序随意,即([]())或者[([][])]都是正确的。而这[(]或者(()])或者([()) 都是不正确的格式。检验括号是否匹配的方法可用“期待的急迫程度”这个概念来描述。...

2020-04-22 19:43:16 387

原创 数据结构与算法之如何基于顺序存储和链式存储设计一个队列

数据结构与算法之如何基于顺序存储和链式存储设计一个队列前言1.  队列的结构2.  顺序存储队列的设计2.1  顺序存储队列的设计2.2  顺序存储队列的基本操作3.  链式存储队列的设计3.1  链式存储队列的设计3.2  链式存储队列的基本操作前言  上一篇,我们学习了栈的结构,以及基于顺序存储和链式存储两个不同角度如何设计一个栈,以及一些对栈的常规操作。那么栈本篇来看一下队列的结构,...

2020-04-14 21:34:00 338

原创 iOS 类拓展分析、load_iamges分析、initalize分析

iOS 类拓展分析、load_iamges分析、initalize分析前言1.  类拓展分析2.  关联对象原理3.   load_images 分析4.   initalize 分析总结前言  通过之前几篇对read_iamges的分析,我们知道了程序在启动运行时的流程,知道了什么是 懒加载类 和 非懒加载类 和其加载过程,以及搭配 非懒加载分类 和 懒加载分类 时的几种加载情况。那么...

2020-04-12 19:12:35 176

原创 数据结构与算法之如何基于顺序存储/链式存储不同角度设计一个栈

数据结构与算法之如何基于顺序存储/链式存储不同角度设计一个栈前言1. 栈的结构2. 顺序存储的栈2.1  顺序存储栈的设计2.2  顺序存储栈的操作3. 链式存储的栈3.1  链式存储栈的设计3.2  链式存储栈的操作4.栈和递归递归过程和递归工作栈前言前面几篇,我们学习了关于线性表的顺序存储以及链式存储,并对链式存储方式的单向链表、单向循环链表、双向链表和双向循环链表的基本操作有了一定的了解...

2020-04-12 00:40:14 157

原创 iOS 应用程序加载

iOS 应用程序加载1. APP 加载分析1.1 动静态库1.2 加载过程2.`_dyld_start` 分析2.1 `reloadAllImages` 分析2.2 `initializeMainExecutable` 运行所有初始化程序总结1. APP 加载分析1.1 动静态库app依赖很多底层库,底层库是很什么?可执行的代码的二进制,可以被操作系统写入到内存库分为几种...

2020-04-11 19:45:34 357

原创 iOS 方法动态决议和消息转发机制

iOS 方法动态决议和消息转发机制1. 动态方法决议1.1 实例方法动态解析 _class_resolveInstanceMethod1.2 _class_resolveClassMethod小结2. 消息转发2.1 快速转发流程2.2 慢速转发流程总结通过上一篇章的学习,OC调用方法,底层是调用 objc_msgSend 发送消息。在发送消息时会经过一系列的...

2020-04-11 19:44:38 294

原创 iOS OC 方法查找流程

iOS OC 方法查找流程前言1. `_class_lookupMethodAndLoadCache3`方法查找流程2. 面试题前言上一篇关于方法的本质的探索中,我们知道了方法的底层是调用objc_msgSend发送消息,并对objc_msgSend的底层汇编进行了分析。当用汇编快速查找,未查找到方法缓存时,会调用 MethodTableLookup,然后调用_class_lookupMeth...

2020-04-11 19:43:38 602

原创 iOS OC 方法的本质

iOS OC 方法的本质前言:1. 方法本质初探2. `objc_msgSend`汇编分析前言:前面探究了方法在类中的缓存,那么方法的本质是什么呢?方法调用在底层做了什么呢?今天我们来探索一下:1. 方法本质初探看一下一段代码:先定义一个LGPerson类,然后定义sayNB对象方法,然后在main函数中调用int main(int argc, const char * argv[])...

2020-04-11 19:42:39 400

原创 iOS OC类原理二

iOS OC类原理二前言:1. `cache_t cache LLDB` 简单分析2.`cache_t cache` 流程源码分析`cache_fill_nolock`详细流程:前言:上一篇探索了属性 成员变量 方法在类中是如何存储的,即存储在class_ro_t *ro中,上一篇中提到为什么在rw中也能打印相应的属性 方法呢?因为rw中的属性 方法在编译期是没有的,是在运行时从ro中cop...

2020-04-11 19:40:57 101

原创 iOS 类的加载分析

iOS 类的加载分析前言1. objc_init分析1.1  environ_init() 环境变量1.2   tls_init()1.3   static_init()1.4   lock_init()1.5   exception_init()1.5   _dyld_objc_notify_register()2.   map_images2.1   _read_images2.2   rea...

2020-04-11 19:36:41 381

原创 iOS 分类的加载

iOS 分类的加载前言1.  Runtime 面试题2.  类和非懒加载类的加载2.1  类和非懒加载类分析2.2  非懒加载类的加载2.3  懒加载类的加载3.  分类 Category 的加载3.1 clang 初探 分类 Category 的结构3.2 类 与 分类 Category 的搭配加载1. 懒加载的分类(未实现`load`方法)2. 非懒加载的分类(实现`load`方法)总结前言...

2020-04-11 19:32:09 489

原创 数据结构与算法之线性表算法练习

数据结构与算法之线性表算法练习前言题目一题目二题目三题目四题目五题目六题目七前言前面了解学习了线性表的单向链表和单线循环链表和双向链表的一些知识,本篇搞几个算法题实战一下。首先,做下面准备代码:#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0// 存储空间初始分配量#define MAXSIZE 20type...

2020-04-10 19:59:40 353

空空如也

空空如也

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

TA关注的人

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