自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Mac下载vscode 缓慢?以下解决方法起飞下载

Mac下载vscode 过慢的解决办法

2023-01-14 15:40:28 2228 1

原创 iOS 沙盒你知道多少?

什么叫做沙盒?对于每一个iOS应用程序都会有一个自己独立的文件系统空间,也就是存储空间。每个App应用程序只能在自己的文件系统空间内进行相关操作,而这个可以操作的空间区域我们称为沙盒。也就是App应用程序操作内容只能待在自己沙盒,而不能访问其他沙盒,这些沙盒之间相对独立,互不影响,互不关联。而且所有的非文件代码都会保存到此,比如plist属性文件、文本文件、图标、图像、媒体资源等。沙盒中de路径1⃣️AppName.app应用程序的程序包目录,包含应用程序的本身。由于应用程序必须经过签名,所以不能在

2020-08-27 17:08:56 425

原创 iOS 熟悉的MVC 和MVVM 设计模式

【MVC设计模式】MVC是一种架构模式,M表示MOdel,V表示视图View,C表示控制器Controller:1⃣️Model负责存储、定义、操作数据;2⃣️View用来展示书给用户,和用户进行操作交互;3⃣️Controller是Model和View的协调者,Controller把Model中的数据拿过来给View用。Controller可以直接与Model和View进行通信,而View不能和Controller直接通信。View与Controller通信需要利用代理协议的方式,当有数据更新时

2020-08-26 15:48:28 194

原创 Copy 与 Strong 的正确使用姿势

—【Copy 与 Strong 的正确使用姿势】—了解 Copy 与 Strong 的区别需要从内存管理方面知识切入。Strong是ARC下引入的修饰,相当于手动管理内存(MRC)下的retain,在相关代码下,常常看到有的人用copy修饰NSString,NSArray,NSDictionary…等存在可变与不可变之分的对象,常常会用copy,而不是strong。下面我们使用OC语言代码来解释一下strong与copy的区别:【拓展:什么是深拷贝?什么是浅拷贝?】深拷贝:内存复制,即copy了多个不

2020-08-25 14:53:57 532

原创 RxSwift 函数响应式编程002 -《神奇的RxSwift》

RxSwift 函数响应式编程 -《神奇的RxSwift》上边文章我们对RxSwift这个库有了初步认识,那么他到底有什么作用呢,这次我们用简单的代码告诉你它的神奇之处。好吧,我们从七个方面,分别是:按钮事件绑定、输入监听、数据绑定、属性监听(KVO)、手势事件绑定、通知和定时器来详细说明它的神奇。直接上代码:按钮事件绑定【传统的事件绑定方法】2步:1、创建一个点击事件方法:@objc func evenThouch(_ sender: UIButton) { }2、通过按钮的addTarg

2020-08-24 11:28:11 259

原创 RxSwift 函数响应式编程001 -《认识 RxSwift》

RxSwift 函数响应式编程 -《认识 RxSwift》一、Rx是什么?Rx 是 ReactiveX的缩写,是一个用观察者模式开发异步和基于事件编程的库。Rx 可以简化异步编程方法,并提供更优雅更安全的数据绑定。让我们可以时刻有序地响应新的数据并且处理。Rx 本身可以说是一种跨平台的标准,它有自己的社区论坛,不管是web 还是移动开发,都能用 Rx 的思维和方法来完成你的工作。作为一种跨平台标准,目前已经有基于Rx开发了许多不同语言的库,有RxPHP, RxJava, RxKotlin, Rx.

2020-08-24 11:25:51 259

原创 一张图告诉你Swift的十大经典排序算法总结

Swift的十大经典排序算法总结排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。这些算法在之前十来篇文章中都有逐一进行详细介绍(如果想了解这些算法知识可以查阅之前发布的文章哦),那么现在我们用一张图来总结下之前的Swift十大经典排序算法特性,如下图所

2020-08-18 10:36:02 398

原创 Swift经典排序算法-桶排序法

桶排序一、基本思路a、将数组中元素划分到不同的桶中。先对遍历数组找到最大值元素(maxNum)和最小值元素(minNum),然后设定用的个数为x个,然后把【maxNum,minNum】均匀划分成 x个区间,每个区间就是一个桶。将数组中的元素分配到各相应的桶中;b、对桶内的元素进行排序,任意选择一种排序算法;c、将各个桶中的元素合并成一个大的有序序列(数组);d、假设数据是均匀分布的,则每个桶的元素平均个数为 n/k 。假设选择用快速排序对每个桶内的元素进行排序,那么每次排序的时间复杂度为 O(n/

2020-08-17 14:56:08 216

原创 Swift经典排序算法-基数排序法

基数排序算法基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或(bin sort),是一种非比较排序算法,时间复杂度是 O(n) 。基数排序 vs 计数排序 vs 桶排序 这三种排序算法都利用了桶的概念,但对桶的使用方法上有明显差异: 基数排序:根据键值的每位数字来分配桶; 计数排序:每个桶只存储单一键值; 桶排序:每个桶存储一定范围的数值。一、基本思路(1)、将所有待排序整数(

2020-08-17 14:52:04 246

原创 Swift经典排序算法-计数排序法

一、小序我们先讲解一道算法题目:数组中有10个随机数值,数值取值范围为从0到5,我们如何用最快的速度把这10个整数从小到大进行排序。首先你会想到我们之前学的快速排序这个算法,因为快速排序算法的时间复杂度只为O(nlogn)。其实这种方法还是不够快,那有没有比快速排序算法更快的排序方法呢?你心中不免疑虑 ???”时间复杂度为O(nlogn)的快速排序??不是最快的???“让我们先来回顾一下经典的排序算法,无论是归并排序,冒泡排序还是快速排序等等,都是基于元素之间的比较来进行排序的。但是有一种特殊的排序算

2020-08-17 14:49:35 286

原创 Swift经典排序算法-堆排序法

堆排序小序:什么是堆?先了解一下什么是堆,堆是计算机科学中的一种特别的树状数据结构,堆总是一棵完全二叉树,它总是满足下列性质:性质1:堆中某个节点的值总是不大于或不小于其父节点的值;性质2:堆总是一棵完全二叉树。 堆的特征就是:给定堆中任意节点P和C,若P是C的母节点,那么P的值会小于等于(或大于等于) C 的值”。将根节点最大的堆叫做最大堆、大顶堆或大根堆,根节点最小的堆叫做最小堆、小顶堆或小根堆,如下图:。常见的堆有二叉堆、斐波那契堆等。同时,我们对以上堆的这种逻辑结构映射到数组中就是

2020-08-17 14:43:43 362

原创 Swift经典排序算法-快速排序法

快速排序快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。快速排序又是一种分而治之思想在排序算法上的典型应用。本质上来看,快速

2020-08-17 14:35:04 296

原创 Swift经典排序算法-归并排序法

归并排序归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法:自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法);自下而上的迭代;在《数据结构与算法 JavaScript 描述》中,作者给出了自下而上的迭代方法。但是对于递归法,作者却认为:【However, it is not possible to do so

2020-08-17 14:31:57 172

原创 Swift经典算法-希尔排序法

希尔排序希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率;但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位;希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。算法步骤1⃣️选择一个增量序列 t1,t2,…

2020-08-17 14:29:16 187

原创 Swift经典排序算法-插入排序法

插入排序插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。算法步骤1⃣️将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。2⃣️从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位

2020-08-17 14:25:15 244

原创 Swift经典排序算法-选择排序法

选择排序选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。算法步骤1⃣️首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置2⃣️再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。3⃣️重复第二步,直到所有元素均排序完毕。动图演示代码实现更多算法知识,关注微信公众号:...

2020-08-17 14:21:28 187

原创 Swift经典排序算法-冒泡排序法

冒泡排序冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。作为最简单的排序算法之一,冒泡排序给我的感觉就像 Abandon 在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉。冒泡排序还有一种优化算法,就是立一个 flag,当在一趟序列遍历中元素没有发生交换,则证

2020-08-17 14:14:48 619

空空如也

空空如也

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

TA关注的人

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