CocoaPods是iOS开发中经常被用到的第三方库管理工具,我们有必要深入了解一下它对项目产生了什么影响,以及它是如何工作的。
使用pod安装三方库
我们新建一个不带测试模块的名为FFDemo的Swift项目,它的目录结构是这样的
├── FFDemo
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ ├── Base.lproj
│ ├── Info.plist
│ ├── SceneDelegate.swift
│ └── ViewController.swift
└── FF...
iOS 加签前对嵌套多层字典数组排序组装
+(void)enumerateKeysAndObjectsUsingBlock:(NSDictionary*)dic block:(void (^)(id key, id obj))block{
NSArray *allKey = [[dic allKeys] sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [obj1 compare:obj2 options:NSLiteralSearch];
}];
for (int i=0;i<allKey.count;i++) {
id obj = dic[allKey[i]];
id key = allKey[i];
...
iOS实现HTTP认证之摘要认证-Digest
什么是Digest?
摘要访问认证是一种协议规定的Web服务器用来同网页浏览器进行认证信息协商的方法。它在密码发出前,先对其应用哈希函数,这相对于HTTP基本认证发送明文而言,更安全。 从技术上讲,摘要认证是使用随机数来阻止进行密码分析的MD5加密哈希函数应用.
1. 基本流程
客户端发起GET(PUT、POST、DELETE...)请求服务器响应401 Unauthorized,WWW-Authenticate指定认证算法,realm指定安全域...
GCD梳理与总结(一)队列、任务、执行任务的方式
GCD是iOS开发中常用的多线程技术,具有以下优点
可用于多核的并行运算。会自动利用更多的 CPU 内核。GCD 会自动管理线程的生命周期(创建线程、调度任务、销毁线程)。
但是由于其知识点细碎,API繁多,所以笔者决定抽空以写博客的方式对GCD进行梳理,总结,归纳和再学习。
首先我们来谈谈几个基本概念
任务
任务就是要执行的操作,也就是你在线程中执行的那段代码。在 GCD 中是放在 block...
SDWebImage的缓存策略
**首先,SDWebImage 的图片缓存采用的是 Memory(内存) 和 Disk(硬盘) 双重 Cache 机制,SDImageCache 中有一个叫做 memCache 的属性,它是一个 NSCache 对象,用于实现我们对图片的 Memory Cache,其实就是接受系统的内存警告通知,然后清除掉自身的图片缓存。Disk Cache,也就是文件缓存,SDWebImage 会将图片存放到 NSCachesDirectory 目录中,然后为每一个缓存文件生成一个 md5 文件名, 存放到文件中。...
AutoLayout约束的使用
概述
在iOS 6之前,可以使用UIView的autoresizingMask属性进行自动适配,autoresizingMask是个枚举UIViewAutoresizing 。
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
UIViewAutoresizingNone = 0,
UIViewAutoresizingFlexibleLeftMargin = 1 << 0,
UIViewAutoresizingFlexibleWidth = 1 << 1,
UIViewAutoresizingFlexibleRightMa...
iOS开发–探究iOS线程调用栈及符号化
探究iOS线程调用栈及符号化
概念
调用栈,也称为执行栈、控制栈、运行时栈与机器栈,是计算机科学中存储运行子程序的重要的数据结构,主要存放返回地址、本地变量、参数及环境传递,用于跟踪每个活动的子例程在完成执行后应该返回控制的点。
一个线程的调用栈如上图所示,它分为若干栈帧(frame),每个栈帧对应一个函数调用,如蓝色部分是DrawSquare函数的栈帧,它在运行过程中调用了DrawLine...
Swift 分包发送蓝牙数据
//分包发送蓝牙数据 是蓝牙单次可处理最大字节长度 let BLE_SEND_MAX_LEN = 20; func sendMsgWithSubPackage(msgData:NSData) {
for i in stride(from: 0, to: msgData.count, by: BLE_SEND_MAX_LEN) {
// 预加 最大包长度,如果依然小于总数据长度,可以取最大包数据大小
if ((i + BLE_SEND_MAX_LEN) < msgData.count) {
let rangeStr = NSString(format: "%i,%i"...
iOS开发之UIMenu
iOS 13 引入
UIMenu 在 iOS 13 中引入,可以很方便的创建程序菜单和上下文菜单。
class ViewController: UIViewController {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
navigationController?.isToolbarHidden = false
// 菜单绑定到UIBarButtonItem(iOS 14的构造函数)
let addNewItem = UIBarButtonItem(systemIte...
LSTTimer 高精度iOS计时器组件
前言
在项目开发中,计时器任务的需求很多, LSTTimer的出现就是为了更好统一管理项目中的计时器任务.欢迎coder们发现问题或者提供更好的idea,一起努力完善
博客地址
github: https://github.com/LoSenTrad/LSTTimer简书: https://www.jianshu.com/p/4f05c7e26bb1
实现思路
LSTTimer单例设计, 内部持有一个NSTimer和计时任务池, 所有的计时任务都被添加到任务池里面; NSTimer每100...