请选择 进入手机版 | 继续访问电脑版

 找回密码
 点一下
查看: 1609|回复: 5

关于,局部变量的问题

[复制链接]
发表于 2013-7-30 00:54:18 | 显示全部楼层 |阅读模式
我想知道局部变量的属性,如果在函数中定义一个局部变量,运行结束后 是不是立刻会被删除、如果变量类型是引用类型(在JAVA中是引用类型 初始值是null)是删除引用地址还是删除元素(大概是这样称呼的吧?)?
局部变量是独立,是不是在同函数中也是独立的?
新手不知道怎样换楼请原谅!!一段这样的函数运行结束后创建的点是否还存在?
function Trig_frankp_Actions takes nothing returns nothing
    local location frank_lo  //定义局部变量 点
    local texttag franktxet //定义局部变量 漂浮文字
    if (  (IsUnitAlly(GetOrderTargetUnit(), GetOwningPlayer(GetTriggerUnit())) == true) ) then
        set frank_lo = GetUnitLoc(GetOrderTargetUnit())
        call SetUnitPositionLoc( GetTriggerUnit(), frank_lo )        
        call CreateTextTagUnitBJ( ( "|cFF8000FF闪|r" + "|cFF16A9EF现|r" ), GetTriggerUnit(), 0, 10, 0.00, 0.00, 0.00, 0 )        
        set franktxet = GetLastCreatedTextTag()
        call SetTextTagVelocityBJ( franktxet, 100.00, 90 )
        call TriggerSleepAction( 1 )       
        call DestroyTextTag( franktxet )
    else
        set frank_lo = GetOrderPointLoc()
        call SetUnitPositionLoc( GetTriggerUnit(), frank_lo )      
        call CreateTextTagUnitBJ( ( "|cFF8000FF闪|r" + "|cFF16A9EF现|r" ), GetTriggerUnit(), 0, 10, 0.00, 0.00, 0.00, 0 )
        set franktxet = GetLastCreatedTextTag()
        call SetTextTagVelocityBJ( franktxet, 100.00, 90 )
        call TriggerSleepAction( 1 )
        call DestroyTextTag( franktxet ) //如果删除此行代码漂浮文字是否会自动删除?
    endif
endfunction



 楼主| 发表于 2013-7-30 01:12:33 | 显示全部楼层
也有一个就是
这两个定义有什么区别?什么时候用 local 什么时候用 Custom Script: local?
local <变量类型> <变量名>
Custom Script: local <变量类型> <变量名>
各位老大,帮帮小弟吧!!!!!!
回复

使用道具 举报

发表于 2013-8-2 01:19:56 | 显示全部楼层
frank630520 发表于 2013-7-30 01:12
也有一个就是
这两个定义有什么区别?什么时候用 local 什么时候用 Custom Script: local?
local  

Custom Script: 是GUI的文字,是自定义代码语句
自然,写Jass的时候不需要也不能加Custom Script:
写T的时候,可以通过这个动作写自定义代码
回复

使用道具 举报

发表于 2013-8-2 01:19:58 | 显示全部楼层
frank630520 发表于 2013-7-30 01:12
也有一个就是
这两个定义有什么区别?什么时候用 local 什么时候用 Custom Script: local?
local  

Custom Script: 是GUI的文字,是自定义代码语句
自然,写Jass的时候不需要也不能加Custom Script:
写T的时候,可以通过这个动作写自定义代码
回复 1 0

使用道具 举报

发表于 2013-8-2 01:40:52 | 显示全部楼层
1、对象不会被自动删除(除了设置了生命周期的漂浮文字,以及正在腐化的单位尸体)
也就是说不管你用什么变量储存它,不管是局部变量还是全局变量,只要你不手动删除它,他会一直存在下去

2、当一个变量被用来储存一个对象的“引用”(也就是handleid)的时候,这个handle的“引用数”会加一
当这个变量的值改变时(不再储存这个handle时),这个handle的引用数会减一
当这个对象被删除时,如果它的handle的引用数为0,那么这个handle所占用的内存空间将会被释放,这个handleid可以被再次使用

3、当函数执行结束时,局部变量将被删除
但仅仅只是它占用的内存被清除,对于他所“引用”的对象并不会有什么影响
遗憾的是,局部变量被删除的时候,并不会减少他所引用的handle的引用数
也就是说,如果在函数结束之前,你没能把这个局部变量set null,那么这个handle将会泄露

所以,不论是“对象”还是“引用”都需要你手动“删除”,handle类型的变量储存的只是handleid而已,他们其实就是一个用来储存handleid的integer
回复 1 0

使用道具 举报

 楼主| 发表于 2013-8-2 21:39:44 | 显示全部楼层
非常感谢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 21:44 , Processed in 0.085296 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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