2013-04-29 30 views
1

我剛剛將一個cocos2d v1.x項目遷移到了v2.x,並且一切似乎都沒有問題。然後我打開了ARC。但現在,CCLayer的一個dealloc永遠不會被調用。在轉換過程中,該方法中的大部分內容都消失了,但只需要留下一個CCLog來指示圖層何時解除分配。我不確定從無弧到弧有什麼問題。各種消息來源提到,必須有其他的東西保留它。這很奇怪,因爲它釋放了所有這些變化。我還沒有完成特定的代碼(該層有很多代碼)。但只是想看看有沒有關於cocos2d v2.x + ARC的常見錯誤。cocos2d v2.x打開arc後,cclayer沒有得到dealloc

+1

相關代碼在哪裏? – LearnCocos2D 2013-04-29 07:52:03

+2

我已經通過定義'OnExit()'和'OnEnter()'方法而不是分別在它們內部調用'[super onExit]'和'[super onEnter]'來燒燬。但除此之外,我們需要一些代碼。 – 2013-04-29 16:01:50

+0

謝謝。我也檢查過這些。 – kawingkelvin 2013-04-29 16:10:39

回答

1

剛解決這個問題。爲什麼cclayer得到了保留在ARC情況下(貌似好轉換後),但之前不就是我宣佈實例變量

@interface SomeObject { 
    CCNode *_parent; 
} 

和我沒有爲它定義一個@property的原因。

我在實現中的某處做了一個任務。在沒有ARC的情況下似乎沒有問題,因爲在_parent上可能沒有任何保留。但在ARC之後,似乎_parent現在是一個強大的參考。這是造成親子風格的循環引用。我認爲一個解決辦法是使其成爲一個不安全的未保存的。但我沒有打擾,因爲它是一些舊的代碼,我實際上忘記了註釋。我擺脫了這個伊娃。我認爲這可能是第一次嘗試轉換爲ARC時的一個陷阱。它也意味着不使用@property聲明一個ivar並不是一個好習慣,當你轉換舊項目時可以咬這個東西。

相關問題