上一篇 | 下一篇

对象列表的调用与删除

发布: 2007-1-25 16:13 | 作者: lingoworkshop | 来源: 译自lingoworkshop.com | 查看: 111次

  原著:lingoworkshop
@ o;JY J   翻译:alphachi
#r1`,^.R4n
E5mu8t,~ ~*@6w   在调用一个对象列表时,如果其中一个对象从列表中删除了它本身,那么调用将被中断,而且其后所有对象的调用信息都将被遗漏。在一个stepframe事件中,如果一个对象从actorList中删除了它本身,将会发生同样的问题。
yuS W9|'S*iw 奥古多媒体 e1JR`tb/Ne8E
  例如,有五个对象A、B、C、D和E,首先使用call(#HandlerName, ListOfObjects)调用它们,那么此后若对象“B”从列表中删除了它本身,则对象C、D和E都将无法收到调用命令。奥古多媒体2ch ? md0V-X.p)k6L4`

I2uEUk9FR:]   要避免这个问题,有两种方法:
M@+V1^2rup,y x 奥古多媒体 pE7M.~7Q%Yd-K
  1. 调用原列表的一个副本,这样既能使对象删除自己,而且又保持了列表本身的完整性。通常情况下,这种方法是最简单有效的(尤其是在列表本身所涉及的对象比较简单时)。
;C8@'x9[7e-I8K%]
C~4h$p[ D1|0W-B   2. 创建一个临时列表,用以纪录那些需要删除的对象,当调用结束后,再根据此列表进行删除。下面便是一个简单的例子:
M2H']3`$G6Q;k7S 奥古多媒体i"Ql1l x/} ia
on mUpdateObjects奥古多媒体q MDm2T%cW
  garbageList = []奥古多媒体U _(l Y?wT V
  call(#mUpdate, listOfObjects, garbageList)奥古多媒体 t;s]v1v'C~
  repeat with anObject in garbageList奥古多媒体*ZY{ k'j jn
    listOfObjects.deleteOne(anObject)
&M'b:E/X X*L   end repeat奥古多媒体%T;AD#b:O:Fu3h{2\ a2w
end
BGp Gdtf-w Bu 奥古多媒体P?RY0c ?Q
on mUpdate (me, garbageList)
e/Ti m VcY \   if removeMe() then garbageList.append(me)奥古多媒体ttI_(o
  else ...update as normal奥古多媒体]0F @fNL5oTM7Q6W
end奥古多媒体S(| m7QX3c

字号: | 推荐给好友

 

评分:0

我来说两句

seccode


最新歌曲
转机 放生 黄玫瑰 摇啊摇 那滋味 擦肩而过 你若成风 幸福一辈子 依然在一起 吻得太逼真 感动天感动地 坐上火车去拉萨 怎么会狠心伤害我
心碎 冲动 小太阳 别碰我 蒲公英 爱情小偷 只要不亏 一定要爱你 等爱的玫瑰 无情的温柔 北极星的眼泪 最后一次的温柔 亲爱的那不是爱情
光荣 火花 下雨天 我可以 樱花草 为你写诗 独家记忆 再见小时候 寂寞才说爱 忘不掉的伤 爱上你是个错 第三者的第三者 孤独的时候可以抱你
假如 城府 是非题 有缘人 舍不得 我的答铃 只欠秋天 外滩十八号 越爱越难过 123木头人 爱走了心碎了 爱上你是我的错 爱情里没有谁对谁错