找回密码
 点一下
查看: 544|回复: 6

哈西表、局域变量问题

[复制链接]
发表于 2013-8-10 18:14:26 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 yeeboys 于 2013-8-10 18:16 编辑

1,哈西表保存单位是保存什么
2,在哈西表1-1位置保存整数,还能在1-1位置保存布尔吗?会覆盖吗?
3,局域变量物品,玩家,单位,使用后直接set null就可以了吗?
4,局域变量整数要不要set x=0来排泄?
5,一个t中有几百条   对(触发单位所有者)的动作,用set player=(.......)代替玩家,会不会大幅度提高效率?
6,哈西表只能保存整数吗?或者是把其他类型保存为整数?
发表于 2013-8-10 18:53:18 | 显示全部楼层
1、保存的是单位的handle,不是单位的属性
2、可以,不冲突,但是handle类型只能一个,比如储存unit会覆盖player
3、是的,局部变量需要set null,player不用,因为player不能删,点、单位组、玩家组……这些除了set null还要记得删除对象本身
4、局部变量只有handle类型需要排泄,因为不这样会增加引用数,integer、real、boolean这些数值类型的都不用
5、不会大幅提升效率,但是需要用到的数据用局部变量储存是好习惯,不仅使用更方便,效率更高,而且还能避免遇到魔兽的BUG(比如“释放的技能”“发布的命令”在多触发情况下会神秘清零...)
6、当然不是只能保持整数
SaveReal
SaveBoolean
SaveString
SaveUnitHandle
SaveTimerHandle
…………

点评

第3个问题,局部变量需要set null,player不用? 为什么?我是只样的,local player p=... set p =null,这样会不会泄露,还有本体是什么  详情 回复 发表于 2013-8-10 21:37
回复

使用道具 举报

 楼主| 发表于 2013-8-10 21:37:41 来自手机 | 显示全部楼层
希瓦 发表于 2013-8-10 18:53
1、保存的是单位的handle,不是单位的属性
2、可以,不冲突,但是handle类型只能一个,比如储存unit会覆盖 ...

第3个问题,局部变量需要set null,player不用?
为什么?我是只样的,local player p=...
set p =null,这样会不会泄露,还有本体是什么

点评

删除对象本身...就是RemoveLocation,DestroyGroup之类的  发表于 2013-8-11 01:24
回复

使用道具 举报

发表于 2013-8-10 22:35:39 | 显示全部楼层
只要是数字、文字类型(如布尔、整数、实数、字串、程式码)、玩家(玩家什么的因为在开始时已经记录了玩家几是谁,所以相当于常量)的不set null都不会造成泄漏的

至于本体嘛...不就是一个变量....又不是奈亚子什么的........
回复

使用道具 举报

发表于 2013-8-11 01:23:26 | 显示全部楼层
yeeboys 发表于 2013-8-10 21:37
第3个问题,局部变量需要set null,player不用?
为什么?我是只样的,local player p=...
set p =null ...

对于player,不set nul都不会泄露,set null就更不会泄露了

实际上局部变量造成的泄露,并不是局部变量本身的泄露,而是它储存的handle的泄露
使用变量储存一个对象后,这个对象的handle的引用数会加一,这个变量改变值时,引用数会减一
在这个对象被删除之后,如果引用数不为零,那么handleid将不会得到释放
如果局部变量不set null的话,引用数就不会减下来,那么在这个对象被删除之后,它的handle就泄露了

而对于player来说,它不能被删除,也就不会泄露,不需要set null
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-12-23 13:07 , Processed in 0.723996 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表