lufei's Studio.

lufei's Studio.

纸上得来终觉浅,绝知此事要躬行。

HandyJSON 原理浅析
前言在 apple 推出 Codable 之前,切换到 swift 的开发者,面对 json 解析处理的问题时,应该都会感受到不是很方便。 由于 swift 本身的语言限制,我们在 OC 时代习惯的那些解析方式并不能很方便的套用在 swift 上,幸好,HandyJSON 在那时出现了,并且 HandyJSON 解决问题的方式也很让人很赞叹,通过直接在内存中赋值的方式实现了一个纯 swift 的 json 解析库。 虽然现在 swift 的开发者们拥有了官方支持的 Codable,但是 HandyJSON 的开发者当时做出的这个创新的 json 解决方案,还是很值得学习的,于是就有了今天...
Swift 取整
本文主要说的是浮点数取整 直接截断取整123let floatNumber = 3.5let value = Int(floatNumber)print("value = \(value)") 可能的输出: 1value = 3 四舍五入取整利用 C 语言 lroundf 函数 123let floatNumber = 3.5let value = lroundf(floatNumber)print("value = \(value)") 可能的输出: 1value &#x...
位运算
前言位运算是基于整数的二进制表示进行的运算。大部分情况下,位运算的运算效率都是很快的。 与、或、异或与( & )或( | )和异或( ^ )这三者都是两数间的运算. 它们都是将两个数作为二进制数,对二进制表示中的每一位逐一运算。 与 : 只有两个对应位都为 1 时才为 1 或 : 只要两个对应位中有一个 1 时就为 1 异或 : 按位异或运算将参与运算的两数对应的二进制位相异或,当对应的二进制位值不同时,结果位为 1,否则结果位为 0,即只有两个对应位不同时才为 1 两次异或同一个数最后结果不变,即 a^b^b = a 取反取反( ~ )是对一个数进行的计算,即单目...
iOS 可能有用的多线程小知识
前言Grand Central Dispatch (简称 GCD) 是一套苹果提供的用来更方便的操作线程的 api。 基于 Grand Central Dispatch,我们可以了解一下,关于多线程的一些小知识。 一些概念Queues中文可以翻译为「队列」,是一种先进先出(FIFO, First-in First-out)的数据结构。 Serial vs Concurrent这两个是反义词,主要是在描述当每项任务(task)被执行时,跟其他任务的关系。 Serial(照顺序执行的) serial queues 的意思就是指这个队列里的任务是按照顺序执行的,一次执行一个,前一个执行完,...
升级 iOS 14 之后
升级 xcode 12 之后,模拟器编译报错报错内容:building for iOS Simulator, but linking in object file built for iOS, xxxx for architecture arm64 因为 xcode 12 之后,Build Settings 不再默认包含 Valid Architectures 编译选项,作为替代品,以 VALID_ARCHS 的形式放到了 User-Defined 的编辑分组下。 并且,因为 arm 的 mac 的推出,xcode 12 也不再默认支持 x86_64 了,需要手动添加才能跑模拟器。 简单...
子网掩码
一直对子网掩码的概念很模糊,总结一下。 子网掩码是一种用来指明一个 IP 地址的哪些位标识的是主机所在的网络地址以及哪些位标识的是主机地址的位掩码。 子网掩码的表示方法通常情况下,子网掩码的表示方法和地址本身的表示方法是一样的。在 IPv4 中,就是点分十进制四组表示法(四个取值从 0 到 255 的数字由点隔开,比如 255.128.0.0) 另一种更为简短的形式叫做无类别域间路由(CIDR)表示法,它给出的是一个地址加上一个斜杠以及网络掩码的二进制表示法中 “1” 的位数(即网络号中和网络掩码相关的是哪些位)。例如,192.0.2.96/28 表示的是一个前28位被用作网络号的IP地...
iOS 仿射变换
仿射变换简述仿射变换,是指在几何中,对一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。 具体到 iOS,苹果在 Core Graphics 中使用 CGAffineTransform 来表示这个变化,或者说映射关系。 简单来说,CGAffineTransform 是一个可以和二维空间向量(例如 CGPoint )做乘法的矩阵。 当对图层应用变换矩阵,图层矩形内的每一个点都被相应地做变换,从而形成一个新的四边形的形状。UIView 有一个 transform 属性就是用来接收 CGAffineTransform,并对当前 view 做变换的。 上面也说了,CGAffine...
Swift 闭包的循环引用
闭包闭包是可以在代码中被传递和引用的功能性独立代码块。Swift 中的闭包和 C 以及 OC 中的 blocks 很像,还有其他语言中的匿名函数也是类似的。 闭包能够捕获和存储定义在其上下文中的任何常量和变量的引用 Swift 闭包大概有以下三种: 全局函数是一个有名字但不会捕获任何值的闭包; 内嵌函数是一个有名字且能从其上层函数捕获值的闭包; 闭包表达式是一个轻量级语法所写的可以捕获其上下文中常量或变量值的没有名字的闭包; Swift 内存管理Swift 是自动管理内存的 释放的原则遵循了自动引用计数 (ARC) 的规则:当一个对象没有引用的时候,其内存将会被自动回收。这套机...
Swift Package Manager tips
前言Swift Package Manager 是用于管理 Swift 代码分发的工具。它与 Swift 构建系统集成在一起,可以自动执行依赖项的下载,编译和链接过程。 Xcode 11 以后集成了 Swift Package Manager ,于是除了 CocoaPods,Carthage 以外,对于 iOS 开发来说,又多了一个官方支持的包管理工具。 接下来,我分享一下使用过程遇到的小问题和解决方法 Xcode fetch 太慢对于这个问题,有三个方案: 在终端设置 proxy,然后 open -a Xcode.app 先下载下来,然后使用本地链接 add 先 clone 到别...
avatar
路小飞
海内存知己,天涯若比邻!