6: iOS中内省的几个方法?class方法和objc_getClass方法有什么区别?
- 1: 什么是内省?
- 2:iOS中内省的几个方法?
- 3:
class
方法分类方法和对象方法。
- 4.
object_getClass()
获取的是类型,对象.isa --->类.isa --->元类.isa ---> 父元类.isa ---> 根元类.isa ---> 自己(还是根元类)
7: 分类和扩展有什么区别?可以分别用来做什么?分类有哪些局限性?分类的结构体里面有哪些成员?
分类和扩展的区别:
分类的局限性:
分类的结构体里有哪些成员
struct category_t {
const char *name; //名字
classref_t cls; //类的引用
struct method_list_t *instanceMethods;//实例方法列表
struct method_list_t *classMethods;//类方法列表
struct protocol_list_t *protocols;//协议列表
struct property_list_t *instanceProperties;//实例属性列表
// 此属性不一定真正的存在
struct property_list_t *_classProperties;//类属性列表
};
8:能不能简述一下 Dealloc 的实现机制
Dealloc 的实现机制是内容管理部分的重点,把这个知识点弄明白,对于全方位的理解内存管理的只是很有 必要。
1.Dealloc 调用流程
2.object_dispose() 调用流程。
3.objc_destructInstance()
调用流程
4.clearDeallocating()
调用流程。
9:HTTPS和HTTP的区别
HTTPS协议 = HTTP协议 + SSL/TLS协议
即HTTPS是安全的HTTP。
https
, 全称Hyper Text Transfer Protocol Secure
,相比http
,多了一个secure
,这一个secure
是怎么来的呢?
这是由TLS(SSL)
提供的!大概就是一个叫openSSL
的library
提供的。https
和http
都属于application layer
,基于TCP(以及UDP)协议,但是又完全不一样。
TCP用的port是80, https用的是443
(值得一提的是,google发明了一个新的协议,叫QUIC,并不基于TCP,用的port也是443, 同样是用来给https的。谷歌好牛逼啊。)
总体来说,https和http类似,但是比http安全。
10:TCP为什么要三次握手,四次挥手?
三次握手:
四次挥手:
为什么需要三次握手:
为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误,假设这是一个早已失效的报文段。
但server
收到此失效的连接请求报文段后,就误认为是client
再次发出的一个新的连接请求。
于是就向client
发出确认报文段,同意建立连接。
假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。
由于现在client
并没有发出建立连接的请求,因此不会理睬server
的确认,也不会向server
发送数据。
但server
却以为新的运输连接已经建立,并一直等待client
发来数据。
这样,server
的很多资源就白白浪费掉了。
为什么需要四次挥手:
因为TCP是全双工通信的,在接收到客户端的关闭请求时,还可能在向客户端发送着数据,因此不能再回应关闭链接的请求时,同时发送关闭链接的请求
11. 对称加密和非对称加密的区别?分别有哪些算法的实现?
对称加密,加密的加密和解密使用同一密钥。
12. HTTPS的握手流程?为什么密钥的传递需要使用非对称加密?双向认证了解么?
HTTPS的握手流程,如下图,摘自图解HTTP
为什么密钥的传递需要使用非对称加密?
使用非对称加密是为了后面客户端生成的Pre-master secret
密钥的安全,通过上面的步骤能得知,服务器向客户端发送公钥证书这一步是有可能被别人拦截的,如果使用对称加密的话,在客户端向服务端发送Pre-master secret
密钥的时候,被黑客拦截的话,就能够使用公钥进行解码,就无法保证Pre-master secret
密钥的安全了
双向认证了解么?
上面的HTTPS的通信流程只验证了服务端的身份,而服务端没有验证客户端的身份,双向认证是服务端也要确保客户端的身份,大概流程是客户端在校验完服务器的证书之后,会向服务器发送自己的公钥,然后服务端用公钥加密产生一个新的密钥,传给客户端,客户端再用私钥解密,以后就用此密钥进行对称加密的通信