2021-03-05

1.锁(递归锁的实现原理)

iOS开发中的11种锁以及性能对比 - 简书

2.自动释放池

3.事件的响应链

4.静态链接和动态链接

5.静态库和数据库

名称 静态库 动态库
定义 链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。 链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。
形式 .a 和 自己创建framework .dylib 和 系统framework

Q:a与.framework有什么区别?

  • .a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。
  • .a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。
  • .a + .h + sourceFile = .framework
    建议用.framework

Q:为什么要使用静态库?

  • 方便共享代码,便于合理使用。
  • 实现iOS程序的模块化,可以把固定的业务模块化成静态库。
  • 和别人分享你的代码库,但不想让别人看到你代码的实现。
  • 开发第三方sdk的需要。

Q:制作静态库需要注意什么?

  • 图片资源处理使用.bundle
  • category处理,在静态哭中调用可以能出现selector not recognized ,解决办法是:在使用静态库的工程中配置other linker flags 的值为-ObjC

6.数据段和代码段

iOS的内存分区.png
  • 代码段:编译之后的代码
  • 数据段
    • 字符串常量:比如NSString *str = @"123"
    • 已初始化数据:已初始化的全局变量、静态变量等
    • 未初始化数据:未初始化的全局变量、静态变量等
  • 堆:通过alloc、malloc、calloc等动态分配的空间,分配的内存空间地址越来越大
  • 栈:函数调用开销,比如局部变量。分配的内存空间地址越来越小

Q:你知道Tagged Pointer么,存储在哪个位置?

  • 从64bit开始,iOS引入了Tagged Pointer技术,用于优化NSNumber、NSDate、NSString等小对象的存储
  • 在没有使用Tagged Pointer之前, NSNumber等对象需要动态分配内存、维护引用计数等,* * NSNumber指针存储的是堆中NSNumber对象的地址值
  • 使用Tagged Pointer之后,NSNumber指针里面存储的数据变成了:Tag + Data,也就是将数据直接存储在了指针中
  • 当指针不够存储数据时,才会使用动态分配内存的方式来存储数据
  • objc_msgSend能识别Tagged Pointer,比如NSNumber的intValue方法,直接从指针提取数据,节省了以前的调用开销

Q:两段代码打印结果有什么区别?

dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
for (int i = 0; i < 100; i++) {
    dispatch_async(queue, ^{
        self.name = [NSString stringWithFormat:@"abcdefghijk"];
    });
}
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    for (int i = 0; i < 1000; i++) {
    dispatch_async(queue, ^{
        self.name = [NSString stringWithFormat:@"abcdefghijk"];
    });
}

第一段代码会引发如下的错误:


内存出错.png

第二段代码没有问题。
我们分别打印abcdefghijk和abc字符串的类型。

NSString *str1 = [NSString stringWithFormat:@"abc"];
NSString *str2 = [NSString stringWithFormat:@"abcdefghijk"];
NSLog(@"\n[str1 class]=%@\n[str2 class]=%@",[str1 class],[str2 class]);
[str1 class]=NSTaggedPointerString
[str2 class]=__NSCFString

解决思路是加锁就可以:

@synchronized (self) {
    self.name = [NSString stringWithFormat:@"abcdefghijk"];
}

7.直播相关 OPENGL webrtc

8.https考察

端口 :HTTP的URL由“http://”起始且默认使用端口80,而HTTPS的URL由“https://”起始且默认使用端口443。
安全性和资源消耗: HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS 运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTP 安全性没有 HTTPS高,但是 HTTPS 比HTTP耗费更多服务器资源。
对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;
非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。

9.LRU淘汰算法

https://www.jianshu.com/p/5451e22109a1

10.计时器

Q:实现定时器有哪几种方式

11.block ARC和MRC的区别

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言和目录 该文章主要整理一些小知识点,主要涉及 iOS 以及计算基础相关知识点,某些知识点暂时只有标题,后续会持...
    iOS开发之家阅读 2,622评论 0 0
  • 开发小知识(一)[https://www.jianshu.com/p/5a4ba3c165b9] 开发小知识(二)...
    ZhengYaWei阅读 13,409评论 11 140
  • UIKit 1.UIView 和 CALayer 是什么关系? UIView 继承 UIResponder,而 U...
    Sephiroth_Ma阅读 6,758评论 0 25
  • 内存管理 1.什么情况使用weak关键字,相比assign有什么不同? 什么情况使用 weak 关键字?在 ARC...
    刺骨寒阅读 4,017评论 0 1
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    余生动听阅读 13,596评论 0 11

友情链接更多精彩内容