自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2019-11-27 10:38:06 547

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

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

2019-11-26 11:53:15 1255

原创 YYCache源码分析

YYCache是OC用于缓存的第三方框架。YYCache:同时实现内存缓存和磁盘缓存,且是线程安全的。 YYDiskCache:实现磁盘缓存,所有的API是线程安卓的,内部也采用了LRU淘汰算法,主要是SQLite和文件存储两种方式。 YYKVStorage:实现磁盘缓存,不推荐直接使用此类,该类不是线程安全的。 YYMemoryCache:实现内存缓存,所有的API是线程安全的,也...

2019-11-25 16:38:04 307

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

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

2019-11-25 15:08:31 315

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

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

2019-11-25 10:04:42 277

原创 编程中的设计原则

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

2019-11-20 15:38:02 217

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

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

2019-11-19 16:11:24 233

原创 iOS RunLoop简介

1.RunLoop和线程的关系?(1)一个线程对应一个RunLoop;(2)主线程默认有一个RunLoop;(3)子线程的RunLoop以懒加载的形式创建;(4)RunLoop存储在一个全局的可变字典里,线程是key,RunLoop是value;2.RunLoop的运行模式RunLoop的运行模式共有5种,RunLoop只会运行在一个模式下,要切换模式,就要暂停当前模式,重...

2019-11-01 15:36:53 194

原创 iOS 多线程

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

2019-11-01 13:36:20 150

原创 iOS组件化简述

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

2019-11-01 11:37:16 459

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

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

2019-11-01 10:51:44 193

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

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

2019-11-01 10:03:21 379

原创 iOS基础总结一(UIKit、Foundation)

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

2019-11-01 10:01:09 313

原创 数据结构

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

2019-10-31 18:20:39 1628

原创 iOS APP耗电的来源与优化

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

2019-07-08 15:19:03 878

原创 iOS APP卡顿优化

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

2019-07-08 14:53:09 808

原创 http + restful简介

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

2019-06-13 17:34:29 6882

转载 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 13:27:57 979

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

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

2018-10-16 17:45:33 976

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

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

2018-10-15 11:56:47 267

原创 排序算法:算法简介

算法简介●什么是算法 ➢一系列的计算步骤,用来将输入数据转化成输出结果●算法的意义 ➢用于解决特定的问题 ➢解决同一个问题的不同算法的效率常常相差非常大,这种差距的影响往往比硬件和软件方面的差距还要大● 比较常听到的较为简单的算法 ➢排序算法 ➢加密算法算法的特征● 有穷性 ➢执行有限个步骤之后终止...

2018-10-15 10:51:00 269

转载 Runtime 常用场景(四)

1. Runtime 怎么添加属性、方法?* ivar 表示成员变量* class_addIvar* class_addMethod* class_addProperty* class_addProtocol* class_replacePropeerty2.Runtime 如何实现 weak 属性?weak 策略表明该属性定义了一种“非拥有关系”(nonowning ree...

2018-09-30 16:11:00 181

转载 Runtime 与消息的关系(三)

一:简介1.体会苹果官方文档中的 messages aren’t bound to method implementations until Runtime。消息直到运行时才会与方法实现进行绑定。

2018-09-27 15:53:36 199

转载 Runtime 相关术语(二)

一.Runtime相关术语1.SEL它是 selector 在 Objc 中的表示(swift 中是Selector 类)。selector是方法选择器,它的作用就和名字是一样的,在日常生活中,我们通过人名辨别谁是谁,注意 Objc 在相同类中不会有命名相同的两个方法。selector对方法名进行包装,以便找到对应的方法实现。它的数据结构是: typedef struct objc_sel...

2018-09-27 12:00:23 155

转载 Runtime 基本介绍(一)

1.Runtime是什么Runtime又叫运行时,是iOS内部核心之一,起底层实现是C语言,平时调用的活着编写的OC代码,底层基本都是基于Runtime实现的。比如:[rereiver message];底层运行时会被编译器自动转为:objc_msgSend(recveiver,selector); 如果带有参数的话:[receeiver message:(id)arg...]; 底层运行...

2018-09-25 11:58:53 3480

转载 iOS weak 实现原理

weak 关键字的作用弱引用,所引用对象的计数器不会加一,并在引用对象被释放的时候自动被设置为nil.如何实现 weak 现在我们将 weak 的思路整理一下: 整个系统中存在很多个对象,这些对象都可能会被弱引用,那么我们需要一个容器来容纳这些被弱引用的对象,比如数组,在此将这个容器的数据结构标识为 objectContainerDataStructure; 一个对...

2018-09-23 00:08:23 604

原创 iOS 容错处理机制

app开发过程中,我们可能遇到很多崩溃,都可以根据崩溃日志进行修复,但很多时候,一些不确定数据(服务端数据)可能会导致一些意外的崩溃,但对于一个好的应用来说,崩溃率是有严格限制的,因此,很多时候需要预防一些常见崩溃1.数组越界------对于一个应用来说,数组的使用是很普遍的,而然很多时候,我们不好使用每个数组前,都对数组进行判断,防止越界。此时,可以通过对数组进行类目扩展,在类目中,对数组进...

2018-09-23 00:04:59 1337

转载 UITableView delegate/dataSource方法执行顺序

第一轮: 1、numberOfSectionsInTableView    :假如section=2,此函数只执行一次,假如section=0,函数不执行,默认为1 2、heightForHeaderInSection  ,执行两次,此函数执行次数为section数目 3、heightForFooterInSection  ,函数属性同上,执行两次 4、number...

2018-02-02 10:01:18 1081

转载 Category 使用和优缺点

iOS 开发中,不可避免的用到Category1、什么是Category?分类就是对一个类的功能进行扩展,,让这个类能够适应不不同情况的需求.在一般的实际开发中,我们都会对系统的一些常用类进行扩展,比如,NSString,Button,Label等等,简单来说类别是一种为现有的类添加新方法的方式。利用OC的动态运行时分配机制,Category提供了一种比继承更为简洁的方法来对类进行扩展...

2018-01-31 11:26:13 10990 1

原创 iOS 常见宏定义

OC中,使用一些宏定义能够减少代码,方便使用,以下为我项目中定义的宏//自定义颜色#define RGB(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:(1)];#define RGBA(r, g, b, a) [UIColor colorWithRed:(r)/255.0 g...

2018-01-23 12:01:31 652

转载 copy,strong,retain,weak和assign的区别

前言: 在初学iOS的时候,对于用什么关键词去修饰property,知其然而不知其所以然,大家都这么用,就这么用,不知道其原理。后来慢慢了解,看了大量的博客和自己慢慢的总结,摘抄了部分我理解的博客内容,内容基本属于前人总结,自己手动写一遍也是为了加强自身理解。在知道他们的区别之前,我们首先要知道NSObject对象的赋值操作做了那些操作。A=C其实是在内存中创建一个A,然后又开辟了一个...

2018-01-22 11:43:40 790

转载 KVO、Notification、delegate、block 各自的优缺点,效率还有使用场景

KVO、Notification、delegate、block 各自的优缺点,效率还有使用场景在开发iOS应用的时候,我们会经常遇到一个常见的问题:在不过分耦合的前提下,controllers间怎么进行通信。在iOS应用不断的出现三种模式以及一种回调来实现这种通信:1.委托 delegation;2.通知中心 Notification Center;3.键值观察 key value...

2018-01-17 14:50:08 3321

转载 怎么解决UITableView 滑动卡顿问题

1.最常用的就是cell的重用, 注册重用标识符如果不重用cell时,每当一个cell显示到屏幕上时,就会重新创建一个新的cell如果有很多数据或者滚动cell的时候,就会堆积很多cell。如果重用cell,为cell创建一个ID每当需要显示cell 的时候,都会先去缓冲池中寻找可循环利用的cell,如果没有再重新创建cell2.避免cell的重新布局cell的布局填充等操

2018-01-15 13:05:13 1837

转载 App启动的完整过程

1. App启动过程    •    解析Info.plist    ▪    加载相关信息,例如如闪屏    ▪    沙箱建立、权限检查    •    Mach-O加载    ▪    如果是胖二进制文件,寻找合适当前CPU类别的部分    ▪    加载所有依赖的Mach-O文件(递归调用Mach-O加载的方法)    ▪    定位内部、外部指针引用,

2018-01-15 11:58:00 485

转载 iOS使用读写plist文件方式对数据进行增删改查

pist 最为持久化保存的一种方式!本身plist文件是xml ,对于小数量数据可以采用plis 的方法!这样更高效!

2016-08-01 10:58:35 1934

空空如也

空空如也

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

TA关注的人

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