FLEX原理详解

FLEX介绍

FLEX是一个可以用在iOS系统上的调试库。使用FLEX,可以在程序运行时很方便的查看系统log,网络请求,内存堆栈,查看当前内存中运行的对象,并可以直接调用对象的某个方法。也可以动态查看当前页面中的UI元素节点。

因此,FLEX也被成为调试神器。

我们可以在GithubFLEX上找到FLEX的源码。

也可以通过pod ‘FLEX’ ,快速将FLEX加入到工程中来。

FLEX的使用

在实际应用过程中,我们可以用FLEX做很多事情。

FLEX是如何查看应用堆栈的

如何查看网络请求信息

如何查看页面元素

更多的调试库

RSA 原理

N = 323;17*19 = 323 私钥

L = 144;16 18 最小公倍数 144

E = 5; 1<E<L && gcd(E,L) =1

公钥(E,N) = (5,323)
私钥 (D,N) = (29,323) 5*29mode144 = 1

明文 20

密文为 20^5===323 == 39

反算 39^29===323

305 * 286 === 323 = 20

N = 3137 = 1147
L = 30
36=566 = 180
E = 17 D = 53

明文20
密文 20^17mod1147 ==

Block的本质

Block

Block的本质就是C语言中的指针函数调用。我们平时在OC中写的Block代码,在clang编译的时候,都会被转换成一个静态函数,并通过Struct包装他的函数地址,用来方便进行调用。

对于Block中自动捕获的变量,会在创建block Struct的时候赋值给到struct 内的一个变量。

Block在经过clang编译后,会被转成三块实现:

  1. 是BlockImpl的结构体
  2. 是static的静态函数,实际上就是我们写的block的实际实现代码,
  3. 是BlockImplDesc,用来描述当前Block的size等信息。

对于用__block 进行描述的变量,在实际编译过程中,会变成一个堆里面的对象。

不同的Block类型

通过打印Block的类型,可以看到Block有几个不同的类型。

  • _NSConcreteStackBlock 栈上Block
  • _NSConcreteGlobalBlock 全局Block
  • _NSConcreteMallocBlock 堆上Block 将block作为函数返回值时,编译器会自动生成复制到堆上的代码。或者使用copy
__block 标记的对象

使用 __block 标记符标记的变量,会变被包装成一个对象。

iOS上的多线程

队列

串行队列与并行队列

任务

同步执行与异步执行

GCD

如何OC上的GCD本质是什么?如何做到跨平台使用

pthread

FLEX原理详解

FLEX介绍

FLEX是一个可以用在iOS系统上的调试库。使用FLEX,可以在程序运行时很方便的查看系统log,网络请求,内存堆栈,查看当前内存中运行的对象,并可以直接调用对象的某个方法。也可以动态查看当前页面中的UI元素节点。

因此,FLEX也被成为调试神器。

我们可以在GithubFLEX上找到FLEX的源码。

也可以通过pod ‘FLEX’ ,快速将FLEX加入到工程中来。

FLEX的使用

在实际应用过程中,我们可以用FLEX做很多事情。

FLEX是如何查看应用堆栈的

如何查看网络请求信息

如何查看页面元素

更多的调试库

iOS上的多线程

队列

串行队列与并行队列

任务

同步执行与异步执行

GCD

如何OC上的GCD本质是什么?如何做到跨平台使用

pthread

iOS上的多线程

队列

串行队列与并行队列

任务

同步执行与异步执行

GCD

如何OC上的GCD本质是什么?如何做到跨平台使用

pthread

ios小技巧

1. 通过runtime的关联对象给对象额外增加实例。
关联对象,很聪明的做法就是使用_cmd指针作为key,不用再额外维护一个字符或其他对象。

1
2
3
objc_setAssociatedObject(self, _cmd, value, OBJC_ASSOCIATION_RETAIN);

objc_getAssociatedObject(self, _cmd)

2. JS中实现的消息转发

3.关键字typeof()

1
__weak typeof(self) weakSelf = self;

4.objectForKeyedSubscript:

实现了这个方法,就能以 a[key] 的形式来取值。

5.

#if !__has_feature(objc_arc)
#error  does not support Objective-C Automatic Reference Counting (ARC)
#endif

通过这个宏来判断该文件是否支持ARC,如果不支持ARC,则报错。