88

IOS 热更新, 实时代码更新,动态更新,动态库framework

https://blog.csdn.net/u012907783/article/details/53158657

https://www.jianshu.com/p/49ff37cdaaf7

4、谈谈你对多线程开发的理解?ios中有几种实现多线程的方法? 好处: (1)使用线程可以把占据时间长的程序中的任务放到后台去处理 (2)用户界面可以更加吸引人, (3)程序的运行速度可能加快 缺点: (1)如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换。 (2)更多的线程需要更多的内存空间。 (3)在多个线程间共享的模型数据,需要注意线程安全,防止线程死锁的发生。 实现多线程的方法: NSObject类方法 NSThread NSOperation GCD

9、堆和栈的区别? 堆需要用户手动释放内存,而栈则是编译器自动释放内存

问题扩展:要知道OC中NSString的内存存储方式 字符串的在数据区常量池,且如果你需要的字符串在常量池中已经存在了,不会在创建 NSString str1 = @“abc”; NSString str2 = [NSString stringWithString:@"abc"]; NSString str3 = [[NSString alloc] initWithString:@"abc"]; 以上3个的空间在栈区,并且str1,str2,str3指向的是同一个地址 NSLog(@"%p%p%p*%p%p",str1,str2,str3,str4,str5);

但是; NSString str4 = [NSString stringWithformat:@"abc"]; NSString str5 = [[NSString alloc] initWithFormat:@"abc"]; 以上两种情况,字符串是存储在堆区的,并且两个的内存地址并不相同,也就是说同一段字符串在堆区中存储了两份。 即: 1)如果先定义了字符串常量会存放在栈区,同时定义的跟这个字符串相同的字符串,注意必须用stringWithString将不再创建。 2)如果无字符串常量,则每定义一个字符串就会在堆区开辟一块内存, 3)%p打印字符串地址

10、iOS本地数据存储都有哪几种方式? NSKeyedArchiver
NSUserDefaults Write写入方式(plist文件、txt文件等) SQLite3 CoreData (问题扩展:什么情况下使用什么样的数据存储) (1)NSKeyedArchiver:采用归档的形式来保存数据,数据对象需要遵守NSCoding协议,对象对应的类必须提供encodeWithCoder:和initWithCoder:方法。 缺点:只能一次性归档保存以及一次性解压。所以只能针对小量数据,对数据操作比较笨拙,如果想改动数据的某一小部分,需要解压或归档整个数据。 (2)NSUserDefaults:用来保存应用程序设置和属性、用户保存的数据。用户再次打开程序或开机后这些数据仍然存在。NSUserDefaults可以存储的数据类型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。缺点:如果要存储其他类型,需要转换为前面的类型,才能用NSUserDefaults存储。 (3)Write写入方式:永久保存在磁盘中。第一步:获得文件即将保存的路径:第二步:生成在该路径下的文件:第三步:往文件中写入数据:最后:从文件中读出数据: (4)SQLite:采用SQLite数据库来存储数据。SQLite作为一中小型数据库,应用ios中,跟前三种保存方式相比,相对比较复杂一些。 (5)CoreData:系统自带的数据库存储。

14、什么是安全释放? 释放后置nil 。

15、RunLoop是什么? Run loops 是线程相关的的基础框架的一部分。 一个 run loop 就是一个事件处理 的循环,用来不停的调度工作以及处理输入事件。 使用 run loop的目的是让你的线程在有工作的时候忙于工作,而没工作的时候处于休眠状态。 Runloop还可以在loop在循环中的同时响应其他输入源,比如界面控件的按钮,手势等。

16、什么是序列化和反序列化,可以用来做什么?如何在OC中实现复杂对象的存储? 序列化是把对象转化成字节序列的过程 反序列化是把字节序列恢复成对象 将对象写到文件或者数据库里,并且能读取出来 遵循NSCoding协议 实现复杂对象的存储 实现该协议后可以对其进行打包或解包,转化成NSData

ViewController 的生命周期

  1. init // 视图初始化时调用
  2. loadView // 加载视图时调用
  3. ViewDidLoad // 视图已经加载后调用
  4. ViewWillAppear // 视图将要出现时调用
  5. ViewDidUnload // 内存不足时调用
  6. dealloc // 销毁该视图时调用

25、UIImage初始化一张图片有几种方法?简述各自的优缺点。 3种 imageNamed:系统会先检查缓存,如果没有,则先加载图像到缓存,然后再返回图像。缺点:一但创建就会占用内存, initWithContentsOfFile:系统不会检查系统缓存,而直接从文件系统中加载并返回。 imageWithCGImage: imageWithData:网络图片的话需要子线程中执行。

1:CALayer与UIView的区别是什么? 两者最大的区别就是:涂层不会直接渲染到屏幕上; UIView是iOS界面元素的基础,所有界面元素都是继承于它,他的本身全是由CoreAnimation来实现的; 真正的绘图部分,是有CALayer类来管理的; 一个UIView上可以有n个CALayer,每个layer来显示一种东西,增强UIView的展现能力。

3:TCP和UDP 都是传输层协议 TCP:(传输控制协议),提供面向连接的、可靠地点对点的通信; UDP:(用户数据报协议),提供非连接的不可靠的点对多点的通信; :TCP的三次握手 第一次握手:客户端发送syn(syn=j)包到服务器,并进入syn_send状态,等待服务器进行确认; 第二次握手:服务器收到客户端的syn包,必须确认客户的SYN(ack = j + 1),同时自己也发送一个SYN包(syn = k),即SYN + ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户收到服务器发送的SYN+ACK包之后,向服务器发送确认包(ACK = k + 1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成第三次握手。

7:http协议的特点,GET POST 请求,以及https协议 http短连接,客户端主动发送请求,服务器做出响应,服务器相应之后,连接断开。GET 请求没有请求体,POST请求有请求体。 https:安全超文本传输协议。基于HTTP开发,用户在客户计算机与服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说就是HTTP的安全版。

6:iOS中对象之间有哪些通讯方式? 代理 Block 通知 KVO

https://blog.csdn.net/andanlan/article/details/78491599?locationNum=1&fps=1

swift 4.0 适配

1.方法前全部加@objc 而且@objc 必须作为第一个修饰词

Hook学习
JSRUN前端笔记, 是针对前端工程师开放的一个笔记分享平台,是前端工程师记录重点、分享经验的一个笔记本。JSRUN前端采用的 MarkDown 语法 (极客专用语法), 这里属于IT工程师。