02 2019 档案
摘要:函数的类型:函数也是类型 (*)->* 函数类型作为类型可以定义变量,使得函数变量具有可替代性,这个是高阶函数的编程基础。 使用函数的类型可以定义函数的变量,并用函数给这个变量赋值; 每一个函数的实现都是一个函数类型的具体实现。 类型系统分为两类: 1、函数类型; 2、变量类型;
阅读全文
摘要:我站在屋顶之上,发现这个屋子千苍百孔。 我站在屋檐之下,发现屋子里装的东西密密麻麻;
阅读全文
摘要:swift的枚举模式是数据结构与操作结合的模式 1、enum本质是一个类型,可以定义变量; 它定义的变量可以用到其它变量用的的任何地方:函数的输入、输出、成员变量、临时变量等; 这个变量还可以带有附加信息:rawValue、关联值等; 枚举变量是一个变量,枚举变量是一个可以携带更多信息的变量; 2、
阅读全文
摘要:1、使用类似动态代理的模式和消息派发中枢模式实现整个架构; 2、使用NSMapTable和NSHashTable进行切面信息的增删查维护;主要用于去重和查看是否存在。 实现方式 消息流 KVOControllerKVOControllerUML observer 调用的方法注册观察者。 FBKVOC
阅读全文
摘要:class baseGoo{ var isScannerRunning = false { willSet{ print(newValue) } } var desp:String = "" { willSet{ print(newValue) } } func testFun()->(){ des
阅读全文
摘要:func response(from resultObject: Any) throws -> Response { guard let dict = resultObject as? [String: AnyObject], let transaction = PendingTransaction
阅读全文
摘要:总结:指定函数的调用规则; 初始化函数的调用顺序与初始化顺序相反。 上面关于指定初始化的规则讲了那么多,其实可以归纳为两点: 便利初始化函数只能调用自己类中的其他初始化方法 指定初始化函数才有资格调用父类的指定初始化函数 苹果官方有个图,有助于我们理解这两点: 当我们为自己创建的类添加指定初始化函数
阅读全文
摘要:整合与构建的能力是创造性思维的重要体现。 构建与整合: 已有的与目标。
阅读全文
摘要:烂尾的原因是request的一致性比较接口没有开放出来。
阅读全文
摘要:一、缓存策略: 1、缓存策略的配置: 缺省缓存策略的存储策略需要服务器的响应配置; 缺省缓存策略的使用需要请求端的配置; 2、缓存策略的缺陷: 移动端比较通用的缓存策略是先使用缓存同时更新本地数据; 缺省的缓存策略更多是同步确认后再使用本地缓存; 这就需要移动端对缓存策略进行定制;一方面把缓存数据从
阅读全文
摘要:前言 开发中遇到需要获取SDK中的数据,由于无法看到代码,所以只能通过监听所有的网络请求数据,截取相应的返回数据,可以通过NSURLProtocol实现,还可用于与H5的交互 一、NSURLProtocol拦截请求 1、NSURLProtoco简介 NSURLProtocol的官方定义 An NSU
阅读全文
摘要:NSURLProtocol 的本质是对特殊的scechme进行特殊的协议定制; 网络(应用层)请求的统一入口是nsurlconnection和nsurlsession; http、htp、mail等协议都是; 如果是不存在的协议,比如 google://gohere.oo 需要自己在网络层的基础上进
阅读全文
摘要:运行时类型信息代表类型信息和对内存的操作能力。 运行时类型信息是运行时系统的基础。 类型信息分为编译时类型信息和运行时类型信息两种; 静态语言的类型信息只在编译时使用和保留,在可执行文件中没有类型信息; 类型信息只用于编译时的类型检查、函数绑定等 类型信息:从编译到运行 1、静态语言:从编译到运行类
阅读全文
摘要:swift是静态语言,没有在运行时保存类型的结构信息(isa、class)。 一、self、Self、Type、typeof extension Collection where Self.Element == UInt8, Self.Index == Int public static func
阅读全文
摘要:中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”)是一种“间接”的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机就称为“中间人”。 中间人攻击(Man-in-the-Middle Attack,
阅读全文
摘要:AOP的本质是HOOK; HOOK的本质是:新函数包含原函数或新函数替换原函数; 需要解决的问题: 1、新函数的生成; 2、新函数的调用机制; 3、原函数的调用机制; 新函数的生成: 1、将已有的动态派发机制函数直接替换; 2、伪造签名后生成新函数,新函数的核心处理逻辑使用通用函数; 总之:重定位到
阅读全文
摘要:libffi is a foreign function interface library. It provides a C programming language interface for calling natively compiled functions given informati
阅读全文
摘要:1.分治法 关键词:递归(递归式)、大问题分解成子问题(子问题相互独立,且与原问题相同)、合并(子问题的解合并成原问题的解) 步骤: 1.分解。将原问题分解成一系列子问题。 2.求解。递归地求解各子问题。若子问题足够小,则直接求解。(递归式) 3.合并。将子问题的解合并成原问题的解 示例:归并排序;
阅读全文
摘要:在aspect_add、aspect_remove方法里面用了aspect_performLocked, 而aspect_performLocked方法用了OSSpinLockLock加锁机制,保证线程安全并且性能高。不过这种锁已经不在安全,主要原因发生在低优先级线程拿到锁时,高优先级线程进入忙等(
阅读全文
摘要:关注核心功能和关键接口:比如网络、模块间的接口 站在架构师的角度看是系统解构与重组的过程 代码阅读的过程是关注核心功能,然后进行分合模型重建的过程。站在底层的角度是盲人摸象、节点搜素的过程。站在高层是系统解构与重组的过程。 代码的灵魂是功能及机制; 代码的骨头是架构; 代码的肉身是技术; 业务决定功
阅读全文
摘要:总结: Aspects 是对 类的继承结构isa、mataclass结构的调整和维护;相当于链表的节点插入和删除; 同时使用method Swizzling 对方法统一重定向; 同时使用类似代理的机制对消息进行转发; 在类结构调整和消息交换重定向的过程中插入织入的功能。 前言 众所周知,Aspect
阅读全文
摘要:结论1、签名的参量类型伪造不正确会导致崩溃。 结论二、签名个数不对可能会导致参量丢失。 结论三:在签名配置正确的情况下,系统会将函数调用的所有信息打包到NSInvocation准备转发; - (void)viewDidLoad { [super viewDidLoad]; // Do any add
阅读全文
摘要:算法沉思录:分而治之(复用); 分而治之是指把大而复杂的问题分解成若干个简单的小问题,然后逐个解决。这种朴素的思想来源于人们生活与工作的经验,也完全适合于技术领域。 要崩溃的节奏; 要崩溃的节奏; Variable Attributes libextobjc 实现的 defer 并没有基于 Obje
阅读全文
摘要:简介: 在IOS9.2官方文档中Attributes的描述如下,简单明了: Attributes provide more information about a declaration or type. There are two kinds of attributes in Swift, tho
阅读全文
摘要:oc的静态函数与类函数不同; 1、静态函数与c++中表现一致,只在模块内部可见; 2、静态函数内部没有self变量; 3、静态函数不参与动态派发;没有在函数列表里;是静态绑定的; @implementation PXGooooogo + (BOOL) testEgo{ NSLog(@"eeeeee"
阅读全文
摘要:数据结构的表现形式即为变量;变量是算法的重要组成部分;算法的表现形式即为变量的维护; 算法中的变量分为几种:输入、输出和临时变量; 输入和输出是算法的基础变量;简单的算法只需要这两种变量就可以; 临时变量是算法中的辅助变量;其表现形式有三种: 1、上下文变量,用于保存算法状态切换时的上下文;这个在链
阅读全文
摘要:八大算法:枚举、递推、递归、分治、贪心、试探法、动态迭代和模拟算法思想。 一、枚举算法思想(暴力算法) 将问题的所有可能答案一一列举,根据判断条件判断此答案是否合适,一般用循环实现。 经典运用:百钱买百鸡、填写运算符 二、递推算法思想 1.顺推法:从已知条件出发,逐步推算出要解决问题的方法。 2.逆
阅读全文
摘要:通过哨兵参数实现,相当于nil. 1.c语言中 #import <stdio.h> #import <stdarg.h> int addemUp(int firstNum,...) { va_list args;//指向参数的指针 int sum = firstNum; int number; va
阅读全文
摘要:HOOK:面向函数,解决函数调用拦截与替换的问题; 动态代理:面向对象,解决对象的动态替换问题; 动态代理的实现方案: 1、经典代理机制; 2、子类化机制;oc语言的isa替换是这额解决方案的经典案例;
阅读全文
摘要:在Java和.Net中的AOP也是利用了这种代理模式的实现。 iOS实现的代码如下: 首先,定义一个接口, 这个接口做两件事,doSomething和doOtherThing。 被代理类需要实现这个接口(不实现其实也可以,只是设计不好,每一个类都应该实现接口或者继承自一个抽象类)。 同时,代理类也实
阅读全文
摘要:hook与链表的节点操作有相似之处; 链表的前后顺序相当于程序的执行流; 对链表节点的替换或插入相当于hook技术; 1、替换:用新的节点替换原来的节点; 2、前插入: 3、后插入; 修改原来的结构。
阅读全文
摘要:动画的组合; caanimationgroup:同一个layer; CATransaction:不同layer; In Core Animation, transactions are a way to group multiple animation-related changes togethe
阅读全文
摘要:CALayer 拥有 mask 属性,Apple 的官方解释如下: An optional layer whose alpha channel is used to mask the layer’s content. The layer’s alpha channel determines how
阅读全文
摘要:数据结构与算法的观点: 数据结构:视图序列; 算法:播放控制; 动画是采用连续播放静止图像的方法产生物体运动的效果。 动画是视图(图像)序列的播放; 动画的内容:图片 包含图片的生成; 图片的处理:合成、光学、几何操作等; 动画的控制:动画的播放控制 播放的基本单元是帧; 播放是将图片序列在时间轴上
阅读全文