当前位置:网站首页>unity初级面试分享

unity初级面试分享

2022-08-11 09:37:00 Gxy_w

今天面试有问到闭包,平时没有接触过这个名词,所以没有答上。

一、闭包
何为闭包:闭包是指:在函数外部,可以读取函数中的成员,及我们所说的局部变量,可以简单的理解为“定义在函数内的成员或者函数”。在本质上说,闭包是指将函数内部和函数外部连接起来的桥梁。
具体操作:当使用闭包时,这次修改的数据会存储在内存中,当下一次使用这些成员的时候,又重新将新的数据存储在内存中。
缺点:比较消耗内存。

二、值类型和引用类型的区别
1、值类型存储在栈区中,引用类型存储在堆区中。
2、值类型表示的是实际数据,引用类型表示的时候对数据的引用。
3、值类型存储速度快,引用类型存储速度慢。
4、值类型继承于system.VauleType,引用类型继承于system.Object
5、栈区的内存分配是自动释放的,而堆区的内存是由GC来进行回收。
6、当声明一个值类型时,不管是否初始化,编译器都将其分配内存,而引用类型需要初始化后才分配内存。

三、装箱和拆箱
装箱:值类型转化为引用类型
拆箱:引用类型转化为值类型
注意:只有被装箱的对象才能进行拆箱操作。
内部操作:
装箱:对值类型在堆区分配一个对象实例,并且将该值复制到新的对象中。
(1)重新分配堆区的内存
(2)将值类型的实例字段拷贝到新分配的内存中
(3)返回堆区中新分配内存的地址,这个地址就是指向对象的引用

拆箱:
(1)获取到堆区中属于值类型的字段地址
(2)将引用对象中的值拷贝到栈上的值类型实例中,会有类型不安全的情况。

四、GC回收的原因,如何减少GC回收调用次数
用new创建一个对象实例的时候,当分配的内存不足时,GC会回收未使用的对象,但是GC的操作很复杂,对移动设备来说,频繁的垃圾回收严重影响性能。
减少new创建对象的次数
使用公用对象
使用对象池技术

五、进程、线程和协程
一个线程可以多个协程,一个进程也可以单独拥有多个协程。
线程进程都是同步机制,而协程则是异步。

协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。

线程是抢占式,而协程是非抢占式的,所以需要用户自己释放使用权来切换到其他协程,因此同一时间其实只有一个协程拥有运行权,相当于单线程的能力。

协程并不是取代线程, 而且抽象于线程之上, 线程是被分割的CPU资源, 协程是组织好的代码流程, 协程需要线程来承载运行, 线程是协程的资源, 但协程不会直接使用线程, 协程直接利用的是执行器(Interceptor), 执行器可以关联任意线程或线程池, 可以使当前线程, UI线程, 或新建新程.。

线程是协程的资源。协程通过Interceptor来间接使用线程这个资源。

原网站

版权声明
本文为[Gxy_w]所创,转载请带上原文链接,感谢
https://blog.csdn.net/lml_w/article/details/126270777