我使用Sparrow框架(V2),我有一个很奇怪的问题,这可能是与麻雀有关,或者它可能与Obj-c有关。我正在为项目使用ARC。与块和引用的奇怪问题
我创建一个影片剪辑这是一个骰子动画,然后我添加一个监听器,并使用块删除动画和影片剪辑,这样的..
diceAnimationPlayer1 = [self getAnimation:atlasName1 fName:frameName1 nFrames:12];
__weak SPMovieClip *weakMC = diceAnimationPlayer1;
__weak SPSprite *weakSP = villageSprite;
[diceAnimationPlayer1 addEventListenerForType:SP_EVENT_TYPE_COMPLETED block:^(SPEvent *event)
{
[Sparrow.juggler removeObject:weakMC];
[weakSP removeChild:weakMC];
}];
这所有作品精细。如果我不想在此时删除动画片段,但想在稍后的日期删除diceAnimationPlayer1,则说明问题出在另一个动画完成后。如果我尝试做
[villageSprite removeChild:diceAnimationPlayer1];
它不仅不会删除动画片段,而且会将动画片段更改为新的阿特拉斯! (我有6个骰子图集,每边一个),所以骰子在最后一帧变成一个新数字。
我检查过是否在另一个顶部创建了一个动画片段,也许有2个动画片段,但据我所知,我不是,这很奇怪。
有没有人有任何想法可能会导致此?无论如何,我并不完全理解所有这些薄弱的业务,而是以某种方式创造一个全新的对象的弱点参考? (即使在调试中检查变量似乎显示它们都指向相同的东西)。
还添加到下面的答案(这不幸并没有解决问题),为什么不删除该对象?
diceAnimationPlayer1 = [self getAnimation:atlasName1 fName:frameName1 nFrames:12];
__weak __block SPMovieClip *weakMC = diceAnimationPlayer1;
__weak __block SPSprite *weakSP = villageSprite;
[diceAnimationPlayer1 addEventListenerForType:SP_EVENT_TYPE_COMPLETED block:^(SPEvent *event)
{
[Sparrow.juggler removeObject:weakMC];
[villageSprite removeChild:diceAnimationPlayer1];
//[weakSP removeChild:weakMC];
}];
我得到相同的结果,骰子动画不会被删除,它只是切换到另一个地图集显示不同的最终数字。
我不确定它会有帮助,但是您是否尝试将__block与__weak?例如__weak __block SPMovieClip * weakMC = diceAnimationPlayer1; __weak __block SPSprite * weakSP = villageSprite; – taffarel
你可以把它作为答案,让我可以更好地看到格式,但我不完全明白__block的意思吗? – Phil