今天在项目中用到了结构体来储存一些不同类型的数据,结构体目的是在任意地方调用和修改其中的数据信息(相信这里对结构体比较了解的人已经发现问题所在了)。当我决定用结构体的那一刻,我就已经走上了一条错误的道路上了。于是我花了白白的一天去各方面找问题。下面我来分析结构体的用处:
struct结构体一般我们用来存储复杂的相关联的一些数据,它和类有很多相似性。类我们一般理解为方法和数据的整合。
unity中最常用的结构体就是Vector2,3。结构体的内存是在栈中开辟,所以其内存回收比较容易。在update里new新的结构体也不会影响游戏的帧数。注意其只能是值传递,其相当于自带了“只读属性”,只有直接修改它的值,想要通过函数返回(强制拷贝返回),或拷贝对象来修改结构体中的数据值是不可能的。这就造成了我的问题:在其他定义域想要修改结构体的值是非常难的,而且极不方便(它传递的是拷贝后的数据,修改后不会对原结构体造成影响)。这显然和项目的需求不同。它的值传递属性是语言定死了的。
再说一下类和它的区别:类的内存是在堆中开辟,所以其内存回收较难。在update里new一个对象会对游戏帧数造成影响。它是引用传递(因为类对象可能会很大,这种传递地址的方式会显著提高效率),在任何地方修改它都会对原对象造成影响。类可以继承其他类,结构体不行。
类和结构体在很多地方是不一样的,但他们各有千秋,应用领域不同,最需要注意的是他们的传递方式!