jgl357
码龄8年
关注
提问 私信
  • 博客:49,354
    49,354
    总访问量
  • 21
    原创
  • 372,608
    排名
  • 8
    粉丝
  • 0
    铁粉

个人简介:iOS开发,移动专家.java开发,让移动端开发更简洁

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:北京市
  • 加入CSDN时间: 2016-07-28
博客简介:

JGL357的博客

查看详细资料
个人成就
  • 获得15次点赞
  • 内容获得1次评论
  • 获得50次收藏
创作历程
  • 17篇
    2019年
  • 17篇
    2018年
  • 1篇
    2016年
成就勋章
TA的专栏
  • 源码分析
    1篇
  • iOS基础知识
    15篇
  • 算法
    7篇
  • iOS数据存储-读写
    1篇
  • Runtime
    4篇
  • 设计模式
    4篇
  • iOS优化
    2篇
兴趣领域 设置
  • 移动开发
    flutterreact native
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

356人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

排序算法(五):希尔排序

希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。希尔排序总结来说就是把记录按步长 gap 分组,对每组记录采用直接插入排序方法进行排序。随着...
原创
发布博客 2019.11.27 ·
600 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

排序算法(四):简单插入排序

插入排序原理通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。假设第一个元素排序之后,后面的元素对排号的部分从后向前比较并逐一移动。它包括直接插入排序、二分插入排序(又称折半插入排序)、链表插入排序、希尔排序(又称缩小增量排序),属于稳定排序的一种(稳定排序,通俗的讲,就是两个相等的数不会叫唤位置)。下面介绍一下直接插入排序直接插入排序直接插入排序是...
原创
发布博客 2019.11.26 ·
1373 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

YYCache源码分析

YYCache是OC用于缓存的第三方框架。YYCache:同时实现内存缓存和磁盘缓存,且是线程安全的。 YYDiskCache:实现磁盘缓存,所有的API是线程安卓的,内部也采用了LRU淘汰算法,主要是SQLite和文件存储两种方式。 YYKVStorage:实现磁盘缓存,不推荐直接使用此类,该类不是线程安全的。 YYMemoryCache:实现内存缓存,所有的API是线程安全的,也...
原创
发布博客 2019.11.25 ·
352 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

设计模式在iOS中的应用(一)

设计模式是有用的抽象化工具,用于解决工程和建筑等领域的设计问题。出于同样的目的,软件开发领域借用了这一概念,设计模式是一个对象或类的设计模板,用于解决特定领域经常发生的问题。本文简单介绍了几种在iOS中常用的设计模式: 代理模式 为其他对象提供一种代理以控制对这个对象的访问。代理模式的思想是使用一个基本跟实体对象行为相同的代理。在iOS中经常使用代理来进行解耦。例如:使用代理把Vi...
原创
发布博客 2019.11.25 ·
308 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

编程中的设计原则

1.单一职责原则通俗的讲,就是一个类只做一件事。例如:CALayer:动画和视图的显示。UIView:只负责事件传递、事件响应。2.开闭原则对修改关闭,对扩展开放。要考虑到后续的扩展性,而不是在原有的基础上来回修改。3.接口隔离原则使用多个专门的协议,而不是一个庞大臃肿的协议,例如UITableviewDelegate + UITableViewDataSource...
原创
发布博客 2019.11.20 ·
275 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

排序算法(三):简单选择排序

原理:它的工作原理是每一次从待排序的数据元素中选出最小(最大)的一个元素,存放在序列的起始位置,然后再从剩余未排序的元素中继续寻找最小(最大)元素,然后放在已排序序列的末尾。以此类推,直到全部待排序的元素排完。C语言代码实现选择排序// 选择排序O(n2):从循环找到最小的元素,与循环的起始位置交换-(void)selectSort:(NSMutableArray *)array{...
原创
发布博客 2019.11.19 ·
288 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

iOS组件化简述

iOS应用架构谈 组件化方案:https://casatwy.com/iOS-Modulization.html1.组件化有什么好处?业务分层、解耦,使代码变得可维护; 有效的拆分、组织日益庞大的工程代码,使工程目录变得可维护; 便于各业务功能拆分、抽离,实现真正的功能复用; 业务隔离,跨团队开发代码控制和版本风险控制的实现; 模块化对代码的封装性、合理性都有一定的要求,提升开发同...
原创
发布博客 2019.11.01 ·
495 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

iOS基础总结一(KVC、KVO简述)

1.KVC实现原理KVC,键值编码,使用字符串直接访问对象的属性; 底层实现,当一个对象调用setValue方法时,方法内部会做一下操作:(1)检查是否存在相应key的set方法,如果存在,就调用set方法;(2)如果set方法不存在,就会查找与key相同名称且带下划线的成员属性,如果有,则直接给成员属性赋值;(3)如果没有找到_key,就会查找相同名称的属性key。如果有,就直...
原创
发布博客 2019.11.01 ·
230 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

iOS基础总结一(UIKit、Foundation)

1.如何实现一个线程安全的NSMutableArray?NSMutableArray是线程不安全的,当有多个线程同时对数组进行操作的时候,可能会导致崩溃或者数据错误。实现方案:线程锁:使用线程锁对数组的读写操作进行加锁; 派发队列:使用“串行同步队列”(serial synchronization queue),将读取操作及写入操作都安排在同一个队列里,即可保证数据同步。而通过并发队...
原创
发布博客 2019.11.01 ·
346 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

数据结构

1.数据结构的存储一般常用的有几种?各有什么特点?数据结构的存储一般常用的有两种:顺序存储结构和链式存储结构。顺序存储结构:比如数组,1-2-3-4-5-6-7-8-9-10,存储是按顺序的,再比如栈和队列等。 链式存储结构:链式存储结构是根据地址进行存储的,每一个存储数据后面跟着一个地址,并且存储形式不再是顺序的。2.集合结构 线性结构 树形结构 图形结构集合结构:一个集合,就是...
原创
发布博客 2019.10.31 ·
1927 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

iOS 多线程

1.进程与线程进程:(1)进程是一个具有独立功能的程序关于某次数据集合的一次运行活动,他是操作系统分配资源的基本单位;(2)进程是指在系统中正在运行的一个应用程序,就是一段程序的执行过程,手机里的APP 就是一个单独的进程;(3)每个进程之间是相互独立的,每个进程均运行在其专用且受保护的内存空间内,拥有独立运行所需要的全部资源;线程(1)程序执行流的最小单位,线程是...
原创
发布博客 2019.11.01 ·
194 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

iOS RunLoop简介

1.RunLoop和线程的关系?(1)一个线程对应一个RunLoop;(2)主线程默认有一个RunLoop;(3)子线程的RunLoop以懒加载的形式创建;(4)RunLoop存储在一个全局的可变字典里,线程是key,RunLoop是value;2.RunLoop的运行模式RunLoop的运行模式共有5种,RunLoop只会运行在一个模式下,要切换模式,就要暂停当前模式,重...
原创
发布博客 2019.11.01 ·
256 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

排序算法(二):快速排序

快速排序(Quicksort)是对冒泡排序的一种改进。他的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程中可以递归进行,以此达到整个数据变成有序序列。基本思想:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到...
原创
发布博客 2019.11.25 ·
357 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

iOS APP耗电的来源与优化

耗电的主要来源:CPU处理,Processing 网络,Networking 定位,Location 图像,Graphics耗电的优化:尽可能降低CPU、GPU功耗 尽量减少定时器的使用 优化I/O操作尽量不要频繁写入小数据,最好批量一次性写入 读写大量重要数据时,考虑用dispatch_io,其提供了基于GCD的异步操作文件I/O的API ,用dispatch_io系统会...
原创
发布博客 2019.07.08 ·
934 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

iOS APP卡顿优化

卡顿解决的主要思路:尽可能减少CPU、GPU资源消耗 尽量使用轻量级的对象,比如用不到事件处理的地方,可以考虑用CALayer取代UIView. 不要频繁的调用UIView的相关属性,比如frame、bounds、transform等属性,尽量减少不必要的修改。 尽量提前计算好布局,在有需要的时候一次性调整对应的属性,不要多次修改属性。 Autolayout会比直接设置frame消耗更...
原创
发布博客 2019.07.08 ·
855 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

http + restful简介

1原理1.1 简介Http协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:WorldWide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML文件, 图片文件, 查询结果等)。http的工作原理HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过U...
原创
发布博客 2019.06.13 ·
7152 阅读 ·
10 点赞 ·
0 评论 ·
21 收藏

Block 的本质是什么

block是一个指针结构体,在终端下通过clang -rewrite-objc 指令看看C++代码。#import <Foundation/Foundation.h>int main(int arc,const char *argv[]){ void (^myblock)() = ^(){ NSLog(@"hello block"); }; ...
转载
发布博客 2018.10.22 ·
1024 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

设计模式(二):代理模式(委托模式)

代理模式组成:抽象角色:通过接口或者抽象类声明真实角色实现的业务方法代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。真实角色:实现抽象角色,定义真实角色所需要实现的业务逻辑,供代理角色调用代理的基本作用代理是一种通用的设计模式,在iOS中对代理设计模式支持的很好,有特定的语法来实现代理模式,OC语言可以通过@protoco...
转载
发布博客 2018.10.16 ·
1050 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

设计模式(一):单例模式

单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例!一.单例模式简介1.单例模式的作用可以保证在程序运行过程中,一个类只有一个实例,而且该实例易于供外界访问,从而方便的控制了实例个数,并节约系统资源。2.单例模式的使用场景在整个应用程序中,共享一份资源(这份资源只需要创建初始化一次)...
原创
发布博客 2019.11.01 ·
446 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

排序算法(一):冒泡排序

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复的走访过要排列的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,走访数列的工作是重复的进行直到没有有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列顶端,所以命名为冒泡排序。算法原理:冒泡排序算法的运作如下:(从后往前)1.比较相邻的元素。如...
原创
发布博客 2018.10.15 ·
317 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多