2013-05-22 123 views
0

我使用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]; 

    }]; 

我得到相同的結果,骰子動畫不會被刪除,它只是切換到另一個地圖集顯示不同的最終數字。

+0

我不確定它會有幫助,但是您是否嘗試將__block與__weak?例如__weak __block SPMovieClip * weakMC = diceAnimationPlayer1; __weak __block SPSprite * weakSP = villageSprite; – taffarel

+0

你可以把它作爲答案,讓我可以更好地看到格式,但我不完全明白__block的意思嗎? – Phil

回答

0

默認情況下,當您在塊中引用引用類型對象時,它將被保留,爲了防止保留,您需要將其標記爲__block。嘗試以下方法

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]; 

     [weakSP removeChild:weakMC]; 

    }]; 
+0

沒有工作,無論如何。 – Phil