<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[菜鸟的向往]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/iOS_kyq</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; iOS_kyq]]></copyright><item><title><![CDATA[iOS之load和initialize方法详解]]></title><link>https://blog.youkuaiyun.com/iOS_kyq/article/details/131871554</link><guid>https://blog.youkuaiyun.com/iOS_kyq/article/details/131871554</guid><author>iOS_kyq</author><pubDate>Sat, 22 Jul 2023 22:24:51 +0800</pubDate><description><![CDATA[iOS之load和initialize方法详解]]></description><category></category></item><item><title><![CDATA[iOS一句代码搞定下拉刷新和上拉加载更多]]></title><link>https://blog.youkuaiyun.com/iOS_kyq/article/details/110438883</link><guid>https://blog.youkuaiyun.com/iOS_kyq/article/details/110438883</guid><author>iOS_kyq</author><pubDate>Tue, 01 Dec 2020 17:53:30 +0800</pubDate><description><![CDATA[现在的iOS刷新控件层出不穷，但是想找到一个样式完全符合自己基本没有，所以利用空余时间自己实现了一个刷新的控件，通过一个demo来搞明白其中的原理。
先来个效果图

大概说一下设计思路，在scrollView的顶部和底部分别添加headerView和footView。通过KVO来监听scrollView的contentOffset、contentSize、bounds这个三个属性，根据contentOffset的改变来显示headerView和footView，监听contentSize的目的是让footV]]></description><category></category></item><item><title><![CDATA[iOS按钮超出父控件部分任能响应点击事件和扩大/缩小响应范围]]></title><link>https://blog.youkuaiyun.com/iOS_kyq/article/details/108449617</link><guid>https://blog.youkuaiyun.com/iOS_kyq/article/details/108449617</guid><author>iOS_kyq</author><pubDate>Mon, 07 Sep 2020 18:55:29 +0800</pubDate><description><![CDATA[设计师在设计UI界面时，为了更加有个性通常会把界面设计的比较复杂实现。比如下面这个界面，中间凸起的那个发布按钮。

默认情况下，如果点击图片红色区域那块是没有任何响应的，系统会丢弃调这次触摸事件。那我们要怎么满足即使点击红色区域也响应发布按钮的点击事件呢？
首先我们必须了解事件的传递过程。

当产生一触摸事件，这个触摸事件会被添加到UIApplication管理的事件队列中，所以首先接收到事件的是UIApplication。
由于队列的先进先出特性，UIApplication会取出最前面的事件传递给应用程序]]></description><category></category></item><item><title><![CDATA[Flutter入门浅谈]]></title><link>https://blog.youkuaiyun.com/iOS_kyq/article/details/108282994</link><guid>https://blog.youkuaiyun.com/iOS_kyq/article/details/108282994</guid><author>iOS_kyq</author><pubDate>Tue, 01 Sep 2020 19:24:31 +0800</pubDate><description><![CDATA[作为一个移动端码农，耳闻Flutter已经是几年前的事，Flutter是谷歌的移动UI框架，可以快速在iOS和Android上构建高质量的原生用户界面。当初因为各种顾虑而没有下定决心去学习它。最近Flutter又出现在我的技术圈子中，想着几年过去应该比较成熟、稳定了，也逐渐被国内一些大厂所接纳，某鱼就是使用Flutter来实现的（某票最近也在使用某鱼，还发现了挺多bug，估计不是亲儿子）。于是忍不住去看了一下Flutter的开发文档，被文档中多次提及的富有表现力，漂亮的用户界面、现代的，响应式框架、快速开发]]></description><category></category></item><item><title><![CDATA[iOS之cocoapods本地组件化详细教程]]></title><link>https://blog.youkuaiyun.com/iOS_kyq/article/details/107982999</link><guid>https://blog.youkuaiyun.com/iOS_kyq/article/details/107982999</guid><author>iOS_kyq</author><pubDate>Thu, 13 Aug 2020 18:14:21 +0800</pubDate><description><![CDATA[一个庞大的工程，把公共的功能组件化是一个非常明智的做法。好处只能说是只可意会，不可言传，当你真正落地到项目中去，你就会发现它的魅力所在。
如果不知道什么是cocoapods的读者，请移步到万能的度娘。我们直接进入正题，手把手教你搭建本地组件化工程。


创建一个名为LocalPod的iOS工程，然后在工程目录下创建本地仓库目录，我把它命名为lcPod，在该目录内创建仓库并命名为 Code。


打开终端cd到 Code 目录下面， 创建 podspec 文件，文件名最好与仓库名相同，不然就要修改podspe]]></description><category></category></item><item><title><![CDATA[一个简单易用的绘图]]></title><link>https://blog.youkuaiyun.com/iOS_kyq/article/details/107561144</link><guid>https://blog.youkuaiyun.com/iOS_kyq/article/details/107561144</guid><author>iOS_kyq</author><pubDate>Fri, 24 Jul 2020 15:29:53 +0800</pubDate><description><![CDATA[最近因项目需求，需要自己定制一个绘图的功能。开始也在网上找了现成的、开源的组件，但是应为样式差别太大、功能不能够满足、修改难度大，所以决定自己实现一个适用项目需求的绘图组件。现在给大家分享一下这个组件，希望能够帮助的上有需要的朋友，代码量不多，修改起来非常容易，使用也很简单。
demo地址（求Star????）
先上个效果图

使用方法非常的简单

添加一条折线图

self.chartView?.drawLine(values: [188.8,165,177.7,155,155,190], xDescri]]></description><category></category></item><item><title><![CDATA[《数据结构与算法》之二叉树]]></title><link>https://blog.youkuaiyun.com/iOS_kyq/article/details/107542977</link><guid>https://blog.youkuaiyun.com/iOS_kyq/article/details/107542977</guid><author>iOS_kyq</author><pubDate>Thu, 23 Jul 2020 18:19:17 +0800</pubDate><description><![CDATA[作为一个程序员，你肯定听说过二叉树，树是一种非线性结构，比前面所讲的栈、队列这种线性结构复杂很多。我们先通过一张图来了解一下二叉树这种结构

我们把没有父节点的节点叫做根节点，也就是图中的节点 E。A 节点就是 B 节点的父节点，B 节点是 A 节点的子节点。B、C、D 这三个节点的父节点是同一个节点，所以它们之间互称为兄弟节点。我们把没有子节点的节点叫做叶子节点或者叶节点，比如图中的 G、H、I、J、K、L 都是叶子节点。
树有三个比较重要的概念：高度、深度、层，我们还是通过一张图来说明

二叉树的存储方]]></description><category></category></item><item><title><![CDATA[《数据结构与算法》之二分查找]]></title><link>https://blog.youkuaiyun.com/iOS_kyq/article/details/107517763</link><guid>https://blog.youkuaiyun.com/iOS_kyq/article/details/107517763</guid><author>iOS_kyq</author><pubDate>Wed, 22 Jul 2020 18:06:18 +0800</pubDate><description><![CDATA[二分查找是一种非常简单易懂的快速查找算法，即使你没有写过二分查找的算法，但是二分思想你在生活中肯定会碰到过。比如猜数字的游戏，从1~100中猜一个数字，每猜一次都会告诉你猜大了还是猜小了，直到猜中为止。现在的你是不是已经有思路了。
假如我定的数字是20，按照上面的规则来看下你只需要猜多少次就能够猜中




次数
猜测范围
中间数
对比大小




第一次
1~100
50
50&gt;20


第二次
1~50
25
25&gt;20


第三次
1~25
12
12&lt;20


第四次
12~25
]]></description><category></category></item><item><title><![CDATA[《数据结构与算法》之排序]]></title><link>https://blog.youkuaiyun.com/iOS_kyq/article/details/107185056</link><guid>https://blog.youkuaiyun.com/iOS_kyq/article/details/107185056</guid><author>iOS_kyq</author><pubDate>Tue, 07 Jul 2020 17:22:44 +0800</pubDate><description><![CDATA[如果你是一名程序员，或多或少你都了解过、听说过排序。在项目中我们也会经常用到排序，排序非常重要，现在我在这里分享一些经典的排序算法。
先附上demo地址
冒泡排序
    /// 冒泡排序
    /// - Parameter array: 数组
    class func bubbleSort(array: inout Array&lt;Int&gt;) {
        for i in 0 ..&lt; array.count {
            var end = true
     ]]></description><category></category></item><item><title><![CDATA[《数据结构与算法》之队列]]></title><link>https://blog.youkuaiyun.com/iOS_kyq/article/details/106721247</link><guid>https://blog.youkuaiyun.com/iOS_kyq/article/details/106721247</guid><author>iOS_kyq</author><pubDate>Fri, 12 Jun 2020 18:30:14 +0800</pubDate><description><![CDATA[如何理解“队列”？
你可以把它想象成排队买票，先来的先买，后来的人只能站末尾，不允许插队。先进者先出，这就是典型的“队列”。我们知道，栈只支持两个基本操作：入栈 push()和出栈 pop()。队列跟栈非常相似，支持的操作也很有限，最基本的操作也是两个：入队 enqueue()，放一个数据到队列尾部；出队 dequeue()，从队列头部取一个元素。所以，队列跟栈一样，也是一种操作受限的线性表数据结构。队列的实现有两种方式，基于数组来实现的栈我们称为顺序队列，基于链表来实现的栈我们称为链式队列。
我这里只实现]]></description><category></category></item><item><title><![CDATA[《数据结构与算法》之栈]]></title><link>https://blog.youkuaiyun.com/iOS_kyq/article/details/106443255</link><guid>https://blog.youkuaiyun.com/iOS_kyq/article/details/106443255</guid><author>iOS_kyq</author><pubDate>Sat, 30 May 2020 17:08:13 +0800</pubDate><description><![CDATA[关于“栈”，我有一个非常贴切的例子，就是一摞叠在一起的盘子。我们平时放盘子的时候，都是从下往上一个一个放；取的时候，我们也是从上往下一个一个地依次取，不能从中间任意抽出。后进者先出，先进者后出，这就是典型的“栈”结构。
从栈的操作特性上来看，栈是一种“操作受限”的线性表，只允许在一端插入和删除数据。
栈的实现有两种方式，基于数组来实现的栈我们称为顺序栈，基于链表来实现的栈我们称为链式栈。在此先附上Demo
顺序栈
1.1 实现
//MARK: - 顺序栈
class ArrayStack: NSObject]]></description><category></category></item><item><title><![CDATA[《数据结构与算法》之链表]]></title><link>https://blog.youkuaiyun.com/iOS_kyq/article/details/106119307</link><guid>https://blog.youkuaiyun.com/iOS_kyq/article/details/106119307</guid><author>iOS_kyq</author><pubDate>Thu, 14 May 2020 15:41:56 +0800</pubDate><description><![CDATA[最近因为在学习《数据机构与算法》，所以有一段时间没有更新博客了。现在通个写一篇关于链表的博客和一个demo来巩固一下最近的学习，把理论转换为“实战”。
链表结构五花八门，其中最常见的链表结构有单链表、双向链表和循环链表。顺便一提，如果在面试中涉及到到链表，面试官老喜欢问你一句：数组和链表的区别。只要我们理解掌握了什么是链表才能从结构、存储数据、插入、删除上的差异来回答。
在这篇文章先说一下单链表。

首先手写一个单链表

要写一个单链表就必须弄清楚它的数据结构，来一张图看下它长什么样子

清楚了它的数据结构]]></description><category></category></item><item><title><![CDATA[《iOS开发高手》专栏学习总结]]></title><link>https://blog.youkuaiyun.com/iOS_kyq/article/details/105600961</link><guid>https://blog.youkuaiyun.com/iOS_kyq/article/details/105600961</guid><author>iOS_kyq</author><pubDate>Mon, 20 Apr 2020 14:18:12 +0800</pubDate><description><![CDATA[最近把《iOS开发高手》这一专栏的内容全部学完了，感觉受益匪浅。开拓了自己那狭隘的技术栈视野。专栏内容讲述的都是与实际开发息息相关的，围绕 iOS 开发在各个阶段（开发、调试测试、发布和上线）遇到的问题展开，并讲解可以利用哪些技术、哪些方案解决遇到的问题。非常值得我们去学习。
接下来了总结一下通过学习这一专栏，自己收获到的知识点，和一些能为我所用并且很快的落地到自己项目中的技术。


APP启动速...]]></description><category></category></item><item><title><![CDATA[简单实用的无痕埋点方案]]></title><link>https://blog.youkuaiyun.com/iOS_kyq/article/details/105294657</link><guid>https://blog.youkuaiyun.com/iOS_kyq/article/details/105294657</guid><author>iOS_kyq</author><pubDate>Fri, 03 Apr 2020 16:48:33 +0800</pubDate><description><![CDATA[最近为了响应公司要求，需要对APP进行埋点来观察用户的使用行为而进行了一次对埋点方案的学习。通过学习了解到了三种埋点方案

代码埋点：通过手写代码的方式进行埋点，能精准的在需要埋点的地方插入埋点代码。但工作量大，埋点代码遍布整个项目，后期维护难度很大。
可视化埋点：将埋点增加和修改的工作可视化了，提升了增加和维护埋点的体验。
无埋点：可以理解为全埋点，埋点代码高度聚合，容易管理和维护，适合大量通用...]]></description><category></category></item><item><title><![CDATA[利用RunLoop来监控APP的卡顿]]></title><link>https://blog.youkuaiyun.com/iOS_kyq/article/details/105180921</link><guid>https://blog.youkuaiyun.com/iOS_kyq/article/details/105180921</guid><author>iOS_kyq</author><pubDate>Sun, 29 Mar 2020 18:32:20 +0800</pubDate><description><![CDATA[我们要怎么利用RunLoop的原理来帮我们定位到APP里面的卡顿场景呢？
人善良，话不多，我们直接进入正题。
从以下代码我们可以看出RunLoop的状态有六种，分别是进入RunLoop、处理timer之前、处理source之前、即将进入休眠、唤醒之后、退出RunLoop
    /* Run Loop Observer Activities */
    public struct CFRunLo...]]></description><category></category></item></channel></rss>