RxSwift-高阶函数

RxSwift操作符

操作符可以帮助大家创建新的序列,或者变化组合原有的序列,从而生成一个新的序列。比如filter过滤,map转换等,具体可参考文档Operator - 操作符

filter,map等操作符都是高阶函数,高阶函数接受一个或多个函数作为输入,最后输出一个函数。下面我们就以map为例进行分析。

Read more   2020/12/15 posted in  RxSwift

RxSwift-核心逻辑分析

基本名词解析

  • Observable:可监听序列,他是事件的生产者。举个例子,你可以将温度看作是一个序列,然后监测这个温度值,最后对这个值做出响应。例如:当室温高于 33 度时,打开空调降温。
  • Observer:观察者,是用来监听事件,然后它需要这个事件做出响应。比如监听当前室温,室温高于 33 度时,打开空调降温。打开空调降温就是观察者
Read more   2020/12/9 posted in  RxSwift

框架分析目录汇总

2020/12/9 posted in  框架分析

RxSwift-如何用协议实现一个命名空间

Read more   2020/12/8 posted in  RxSwift

[iOS底层]-KVC底层原理

KVC概述

KVC提供了一种可以间接访问对象属性的方式,即可以通过字符串key来访问某个属性。主要是通过NSKeyValueCoding协议实现。

KVC常用API

  • 通过key设置取值。
    ```oc
    // 通过key设置值
    - (void)setValue:(nullable id)value forKey:(NSString *)key;

// 通过key取值

  • (nullable id)valueForKey:(NSString *)key;
    ```
2020/12/5 posted in  iOS底层

[iOS底层]-autoreleasepool底层原理

autoreleasepool的基本原理

下载Demo,通过使用Clang编译器把OC文件编译成C++文件的学习,我们已经知道如何把OC编译成C++。接下来就把main.m编译成main.cpp,得到@autoreleasepool的C++的底层源码:

Read more   2020/11/26 posted in  iOS底层

狸叔资产

APP介绍

银行卡,信用卡,花呗,股票,基金,你是不是也遇到自己的资产因存放地方太多,有时会忘记自己还剩余多少钱呢?

你是不是也像我一样想管理好自己的资产,但是每天记账又会觉得太繁琐呢?

你是否也担心自己的资产数据存放到别人的服务器上而感到不安全呢?

狸叔资产的诞生就是基于上述场景,我想要的是一款单纯的资产统计APP,只需要每个月花点时间做一次资产统计梳理,就可以做到对自己的资产情况有个清楚的认知。

Read more   2020/11/9 posted in  关于我

SVProgressHUD在Xcode11以后的项目中无法运行

错误提示

运行SVProgressHUD.show()后直接崩溃,报下面的错误

2020-10-23 11:12:48.021999+0800 wealth[9884:155319] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[wealth.AppDelegate window]: unrecognized selector sent to instance 0x6000007b8190'
*** First throw call stack:
(
    0   CoreFoundation                      0x00007fff2043a126 __exceptionPreprocess + 242
    1   libobjc.A.dylib                     0x00007fff20177f78 objc_exception_throw + 48
    2   CoreFoundation                      0x00007fff20448c6f +[NSObject(NSObject) instanceMethodSignatureForSelector:] + 0
    3   UIKitCore                           0x00007fff24695af8 -[UIResponder doesNotRecognizeSelector:] + 292
    4   CoreFoundation                      0x00007fff2043e3f0 ___forwarding___ + 859
    5   CoreFoundation                      0x00007fff20440698 _CF_forwarding_prep_0 + 120
    6   SVProgressHUD                       0x0000000100e51325 __27+[SVProgressHUD sharedView]_block_invoke + 117
    7   libdispatch.dylib                   0x00000001018b5a88 _dispatch_client_callout + 8
    8   libdispatch.dylib                   0x00000001018b6ff3 _dispatch_once_callout + 66
    9   SVProgressHUD                       0x0000000100e51288 +[SVProgressHUD sharedView] + 136
    10  SVProgressHUD                       0x0000000100e5267d +[SVProgressHUD showProgress:status:] + 61
    11  SVProgressHUD                       0x0000000100e52454 +[SVProgressHUD showWithStatus:] + 68
    12  SVProgressHUD                       0x0000000100e52365 +[SVProgressHUD show] + 37
Read more   2020/10/23 posted in  BUG记录

[iOS底层]-objc_msgSend慢速查找流程

慢速查找汇编部分

[iOS底层]-objc_msgSend快速查找原理中我们分析了缓存命中的情况,则会返回相应的imp,不过CheckMissJumpMiss的情况下要如何进行处理我们还没有进行分析。根据CheckMissJumpMiss的源码,我们发现他们都会跳转到__objc_msgSend_uncached

Read more   2020/10/7 posted in  iOS底层

汇编指令查询

概述

ARM处理器的指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指令、加载/存储指令、协处理器指令和异常产生指令6大指令。

本文只列举一些常见的基本指令,可以正常阅读汇编代码即可。有几个注意点:

  • 寄存器:为标号,不加前缀
  • 操作数顺序:目标操作数在左,源操作数在右
  • 立即数:前加#作为前缀
  • 寻址格式:常见的有三种
Read more   2020/9/24 posted in  iOS底层

iOS需要了解的ARM64汇编(搬运)

概述

早期的程序员发现机器语言在阅读、书写方面的问题,是如此的难以辨别和记忆,需要记住所有抽象的二进制码,为了解决这个问题,汇编语言就产生了。汇编语言是各种CPU提供的机器指令的助记符的集合,人们可以用汇编语言直接控制硬件系统进行工作。

Read more   2020/9/23 posted in  iOS底层

[iOS底层]-objc_msgSend快速查找原理

方法是如何读取的?

[iOS底层]-cache_t分析一文里,我们知道了方法是如何缓存起来的,缓存的目的是为了加快方法的查找速度,那么我们在调用方法的时候是如何去读取这些缓存的呢?

Read more   2020/9/23 posted in  iOS底层

iOS14一直卡在条款与条件,无法更新

以前装过iOS14 Bate版,苹果更新推出iOS 14正式版的推送后,点击更新,一直卡在条款与条件页面,无法更新,点击同意或不同意都没反应。

解决办法

退出iCloud登录,然后再点击更新下载就可以成功了。

2020/9/18 posted in  玩机技巧

[iOS底层]-cache_t分析

[iOS底层]-类的结构分析中我们讨论了类的结构如下:

同时使用首地址偏移的办法研究了bits,同样,今天我们也用此方法来研究一下类的cache

Read more   2020/9/18 posted in  iOS底层

[iOS底层]-SEL和IMP

SEL和IMP是什么?

  • SEL:方法编号,就像是一本书的目录,SEL是每章的标题。
  • IMP:函数指针地址,IMP就像是页码,通过SEL和对应IMP,我们就能找到函数的实现代码存放位置。
Read more   2020/9/17

使用Clang编译器把OC文件编译成C++文件

Clang是什么?

Clang是一个C、C++、Objective-C和Objective-C++编程语言的编译器前端,它采用了LLVM作为其后端。由Apple主导编写,基于LLVM的C/C++/Objective-C编译器。

Read more   2020/9/16 posted in  iOS底层