
iOS
hungry_lady
java iOS 产品设计
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
语法糖
public protocol BlogPost: Equatable {var title: String { get }var author: String { get }}/// Equatable 报错/// BlogPost 只能被用作泛型约束。这是因为 Equatable 协议有一个名为 Self 的关联类型。具有关联类型的协议不能用作类型,即使他们看起来像类型。相反,它们有...原创 2020-04-28 11:02:05 · 324 阅读 · 1 评论 -
单向数据流动
import UIKitimport Foundation/单向数据流动*****//// https://onevcat.com/2017/07/state-based-viewcontroller//// 新状态 = f(旧状态, 用户行为)/// func reducer(state: State, userAction: Action) -> State/// func ...原创 2020-04-28 09:20:03 · 421 阅读 · 0 评论 -
函数响应式
import UIKitimport Foundation/函数响应式编程*****//// 函数式编程思想:是将操作尽可能写在一起!嵌套的函数!!/// 本质:就是往方法里面传入Block,方法中嵌套Block调用./// block可以作为对象的属性,也可以作为方法的参数,也可以作为返回值。而作为返回值是链式编程的核心/*高阶函数是至少满足下列一个条件的函数:1 接受一个或多个...原创 2020-04-26 15:20:03 · 390 阅读 · 0 评论 -
协议编程 Swift中,值类型优先于类
import UIKitimport Foundation/面向协议编程*****//// POP就是通过协议扩展,协议继承和协议组合的方式来设计需要编写的代码/// 协议扩展 Protocol Extensions/// 协议继承/// 协议组合/// Swift中,值类型优先于类,值类型可以从协议继承,设置支持从多个协议继承,因此,使用POP让值类型成为了Swift中的一等公民...原创 2020-04-26 14:32:40 · 192 阅读 · 0 评论 -
函数式编程、柯里化、存储,计算属性,枚举关联值
import UIKitimport Foundation/函数式编程*****//// 假设现在有一个零售水果的在线商店,需要频繁的用到不同的重量单位,但是最终服务器都是以kg来计算和存储,所以需要频繁的将其他的重量单位转为kg来做为数据的存储,又需要频繁的将kg转换成其他的重量单位来作为显示/// 存储属性、计算属性struct Kilogram {var kg: Double/...原创 2020-04-26 11:27:57 · 201 阅读 · 0 评论 -
Functor(函子)、Monad(单子)、Applicative(高级函子)
import UIKitimport Foundation/***********Functor(函子)、Monad(单子)、Applicative(高级函子)****************//*Context(上下文)呢,我们可以将它理解为对值的一个包装,通过这层包装,我们可以得知值此时所处在的一个状态*/enum Result {case success(T)case fai...原创 2020-04-26 10:18:17 · 325 阅读 · 0 评论 -
下标、字面量
import UIKitimport Foundation/下标*****//*subscript(index: Int) -> Int {get {// 返回一个适当的 Int 类型的值} set(newValue) { // 执行适当的赋值操作 }}*/struct TimesTable {let multiplier: Intsubscript(in...原创 2020-04-24 17:08:23 · 155 阅读 · 0 评论 -
泛型
import UIKitimport Foundation/泛型*****//// 泛型编程是一种算法机制为types to-be-specified-later(类型确定滞后)的计算机编程风格func removeSameElement<T: Equatable>(_ originArr: [T]) -> [T] {return originArr.reduce(T)...原创 2020-04-24 16:34:55 · 172 阅读 · 0 评论 -
模式匹配
import UIKitimport Foundation/Swift 模式匹配**/enum Weather {case rain, snow, wind, sunny}let todayWeather = Weather.rainswitch todayWeather {case .rain, .snow:print("")case .wind:print("")cas...原创 2020-04-24 15:31:29 · 164 阅读 · 0 评论 -
写时复制
import UIKitimport Foundation/swift 写时复制**/func print(address o: UnsafeRawPointer ) {print(String(format: “%p”, Int(bitPattern: o)))}var array1: [Int] = [0, 1, 2, 3]var array2 = array1print(ad...原创 2020-04-24 15:01:40 · 265 阅读 · 0 评论 -
Swift 尾随闭包 map compactMap flatMap filter reduce
import UIKit/// 尾随闭包func someFuncThatTakesClosure(closure: () -> Void) {}/// 不使用尾随闭包someFuncThatTakesClosure(closure: {})/// 使用尾随闭包someFuncThatTakesClosure {}let names = [“eva”, “adon”]/...原创 2020-04-23 21:16:05 · 269 阅读 · 0 评论 -
pod install 查看进度
pod install --verbose --no-repo-update原创 2020-03-09 11:01:08 · 3951 阅读 · 0 评论 -
架构、框架
基本架构框架图片缓存阅读时长统计复杂页面架构客户端整体架构为什么使用框架、架构模块化分层解耦降低代码重合度内存设计需要注意的问题存储size淘汰策略1、以队列先进先出的特点进行淘汰2、LRU(Least Recently Used)算法【最近最久】磁盘设计存储方式大小限制淘汰策略网络设计图片请求并发量请求超时策略请求的优先级图片...原创 2019-12-02 17:28:13 · 210 阅读 · 0 评论 -
网络
HTTPS与网络问题TCP和UDP差错检测TCP-传输控制协议可靠传输无差错不丢失不重复按序到达面向字节流流量控制滑动窗口拥塞控制慢开始、拥塞避免快恢复、快重传DNS解析递归查询迭代查询问题:1、劫持DNS劫持与http没有关系DNS发生在http建立连接之前,udp访...原创 2019-11-30 14:43:38 · 111 阅读 · 0 评论 -
Runloop
Runloop通过内部维护的 事件循 环来对事件/消息进行管理的一个 对象Event loop事件循环:1、没有消息处理时,休眠避免资源占用 用户态进入内核态2、有消息处理时,立刻被唤醒 内核态进入用户态等待 不等于 死循环数据结构Runloop和NSTimer解决:addTimeToCommonModeRunloop 和 多线程...原创 2019-11-26 19:26:08 · 120 阅读 · 1 评论 -
多线程
GCD同步sync执行在当前线程,顺序执行dispatch_barrier_async多读单写异步栅栏调用dispatch_group多个任务同时执行,完成执行最后一个NSOperationQueue1、添加任务依赖2、任务执行状态的监控3、控制最大并发量isReady 是否就绪isExecuting 正在执行isFinished 已经完成isCanceled ...原创 2019-11-25 20:40:01 · 128 阅读 · 0 评论 -
Block
block:将函数及其执行上下文封装起来的对象block的调用实际就是函数的调用截获变量block之前声明的变量__block一般情况下,对被截获变量进行赋值,需要使用__block使用 不等于 赋值栈上的forwarding指向自己block内存管理栈上__block copyblock循环引用__weak...原创 2019-11-25 15:37:46 · 218 阅读 · 0 评论 -
内存管理
内存布局stack 方法调用 地址自上而下heap 通过alloc等分配的对象 地址自下而上bss 未初始化的全局变量data 已初始化的全局变量text 程序代码内存管理方案TaggedPointer : 小对象 NSNumber等NONPOINTER_ISA :散列表:NONPOINTER_ISAarm64架构散列表方式数据结构MRC...原创 2019-11-22 16:08:27 · 283 阅读 · 0 评论 -
动态运行时(Runtime)
objc_object:objc_class:isacache_t局部性原理:调用频率高的放到缓存,提高效率class_data_bits_tclass_ro_tmethod_t整体数据结构对象、类对象、元类对象类对象:存储实例方法列表等信息元类对象:存储类方法列表等信息消息传递父类逐级查找消息转发Method-Swizzling...原创 2019-11-22 13:34:05 · 189 阅读 · 0 评论 -
语言特性
Category分类用法:1、声明私有方法2、分解体积庞大的类文件3、framework的私有方法公开化分类:1、运行时决议、系统类添加2、可以添加a:实例方法、b:类方法、c:协议、d:属性(只是声明get、set,并未添加实例变量,可以通过关联对象添加实例对象)3、加载调用栈4、源码分析同名方法在不同分类中,最后编译的会生效首先获取全部的分类方法,进行组装,再...原创 2019-11-16 15:11:19 · 230 阅读 · 0 评论 -
设计模式
六大设计原则:1、单一职责:一个类负责一件事2、依赖倒置:抽象不应该依赖于具体实现、具体实现可以依赖抽象3、开闭:对修改关闭,对扩展开放4、里式替换:父类可以被子类替换、原有功能不受影响5、接口隔离:使用多个专门的协议,而不是一个庞大臃肿的协议,协议中的方法尽可能的少6、迪米特:一个对象对其他对象尽可能少的了解【高内聚、低耦合】1、责任链(事件响应)需求操作顺序变更需求顺序变更,...原创 2019-11-15 17:06:46 · 102 阅读 · 0 评论 -
UI 视图
1、UITableView重用机制:cell = [tableView dequeueReusableCellWithIdentifier:“identifier”];数据源同步:1、并行访问、数据拷贝2、串行执行2、事件传递&视图响应链事件传递:从下至上视图响应链:从上至下3、图像显示原理4、卡顿&掉帧原因滑动优化方案:5...原创 2019-11-15 14:17:15 · 289 阅读 · 0 评论 -
iOS 第三方库
github地址框架图:主要类关系图:AFURLSessionManager:SDWebImage:异步下载并支持缓存github地址加载流程:RAC 函数响应式编程github地址信号、订阅RACDynamicSignalRACReturnSignalAsyncDisplayKit提高iOS界面渲染性能github地址主要处理问题:1、lay...原创 2019-11-14 11:48:09 · 173 阅读 · 0 评论 -
iOS 温故知新(三)
1、一个objc对象的isa的指针指向什么?有什么作用?指向他的类对象,从而可以找到对象上的方法2、一个objc对象如何进行内存布局?(考虑有父类的情况)所有父类的成员变量和自己的成员变量都会存放在该对象所对应的存储空间中.每一个对象内部都有一个isa指针,指向他的类对象,类对象中存放着本对象的根对象就是NSObject,它的superclass指针指向nil类对象既然称为对象,那它...原创 2019-05-29 10:13:32 · 130 阅读 · 0 评论 -
iOS 温故知新(二)
1、weak属性需要在dealloc中置nil么?不需要。在ARC环境无论是强指针还是弱指针都无需在 dealloc 设置为 nil , ARC 会自动帮我们处理即便是编译器不帮我们做这些,weak也不需要在 dealloc 中置nil:2、@synthesize和@dynamic分别有什么作用?@property有两个对应的词,一个是 @synthesize,一个是 @dynamic。...原创 2019-05-29 09:47:04 · 161 阅读 · 0 评论 -
iOS 温故知新(一)
1、什么情况使用 weak 关键字,相比 assign 有什么不同?什么情况使用 weak 关键字?在 ARC 中,在有可能出现循环引用的时候,往往要通过让其中一端使用 weak 来解决,比如: delegate 代理属性自身已经对它进行一次强引用,没有必要再强引用一次,此时也会使用 weak,自定义 IBOutlet 控件属性一般也使用 weak;当然,也可以使用strong。不同点:...原创 2019-05-28 17:04:17 · 151 阅读 · 0 评论 -
iOS 温故知新(四)
1、_objc_msgForward函数是做什么的,直接调用它将会发生什么?_objc_msgForward是 IMP 类型,用于消息转发的:当向一个对象发送一条消息,但它并没有实现的时候,_objc_msgForward会尝试做消息转发。调用resolveInstanceMethod:方法 (或 resolveClassMethod:)。允许用户在此时为该 Class 动态添加实现。如果有...原创 2019-05-30 10:24:24 · 170 阅读 · 0 评论