Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(196评价)
价格: 4019.00元
关于静态类和静态函数的问题
Everness发起了问答2017-08-20
6
回复
949
浏览

老师您好,我想问下关于静态函数的内存方面的问题。我记得如果将一个静态类在游戏中即使销毁后也会占用相当于这个类存在时的内存量。那么静态函数在这方面是如何算的呢?

是否静态函数也会始终占用其相应的内存而无法得到释放?

如果是的话,还有以下的问题。

问题分为两种情况:

情况1:一个普通类中含有一个静态函数public static void A()

情况2:一个静态类中含有一个静态函数public static void A()

假定以上两个静态函数是相同的,占用内存也相同。那么其是否会对他们所在的类本身有影响?

就是比如说我知道静态类无法释放,那么里面的函数是否静态对内存占用都没啥区别吧?反正即使这个类被置空也会占用着同样大的内存空间,不会被释放。

但是如果是普通类中有一个静态函数的话,这个类所占用的内存是否会在使用完后被释放?还是说会保留这个静态函数的内存空间,或者整个普通类都无法被释放?

谢谢!

 

所有回复
  • siki 2017-08-22

    你这里认知上好像有点错误,我们会讨论一个对象所占用的内存,一个变量所占用的内存, 变量也好对象也好在,占有 的内存都是可以销毁的

    而对于一个静态类静态函数来说,无所谓占不占有内存,没有这么讨论的

    函数只有在调用的时候,才会申请占有内存,不调用的时候不占有内存,对于类来说,来申明了对象这个对象才占有内存

    对于静态类来说,里面的静态变量是占有内存的, 设置为null,会自动销毁所占有的内存

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • siki 2017-08-22

    你这里认知上好像有点错误,我们会讨论一个对象所占用的内存,一个变量所占用的内存, 变量也好对象也好在,占有 的内存都是可以销毁的

    而对于一个静态类静态函数来说,无所谓占不占有内存,没有这么讨论的

    函数只有在调用的时候,才会申请占有内存,不调用的时候不占有内存,对于类来说,来申明了对象这个对象才占有内存

    对于静态类来说,里面的静态变量是占有内存的, 设置为null,会自动销毁所占有的内存

    • Everness 2017-08-23

      但是请问,我看过很多都说Unity里面的静态类无法轻易销毁,即使切换场景了,上个一个场景中静态部分的资源还是什么的还是会占用,所以一般都提倡能不用静态就不用静态。请问这个是什么方面的问题?谢谢老师。

      (1) 回复
    • siki 2017-08-23

      回复 @ Everness: 静态类无法轻易销毁 这句话描述有有问题的,类不需要销毁, 静态类上的一些静态数据,可以在其他地方方便访问,想销毁的话,直接置空就行了null

      (1) 回复
    • Everness 2017-08-25

      那请问下,为什么都说要少用静态类呢,或者说能不用就不用?毕竟静态类可以直接访问,除了可能会使代码结构变乱以外,感觉调用起来会很方便。

      (1) 回复
    • siki 2017-08-25

      回复 @ Everness: 会使代码结构变乱 这个在项目大了以后,有几百个类是时候,这个问题就比较严重

      (1) 回复
    还有-1条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!