2012-06-14 46 views
0

我想在我的GameManager單例初始化中構建一些場景。ccscene弧和autorelease

場景是通過

- (id)init 
    { 
     self = [super init]; 
     if (self) {  // 'mainScene' is an autorelease object. 
     mainScene = [CCScene node]; 
... 
    } 

GameManger持有強引用mainScene創建:

@interface GameManager : NSObject 
{ 
    CCScene* mainScene; 
} 

但是,如果我嘗試使用

[[CCDirector sharedDirector] pushScene:mainScene]; 

我拿到後推現場EXC_BAD_ACCESS

如果我創建並立即推動,那麼一切正常。不應該使用默認的__strong引用來保持對象的分配?

在此先感謝您的幫助....

回答

0

想通了... [CCScene節點]是一個方便的工廠方法,做: [[[自我ALLOC] INIT]自動釋放]。

但因爲我使用弧......我不想說 - 我想

mainScene = [[CCScene alloc]init]; 

,而不是

mainScene = [CCScene node]; 
+1

也不讓你使用ARC時有什麼區別。 [CCScene節點]和[[CCScene alloc] init]的工作原理與ARC相同(儘管低級技術細節揭示了稍微不同的內存管理例程)。確保你沒有陷入推動當前正在運行的場景的陷阱,這將會崩潰。 – LearnCocos2D

+0

我絕對沒有推出一個正在運行的場景 - 並驗證調用[[[[CCScene alloc] init] autorelease];崩潰和[[CCScene alloc] init]不.... – OptimisticMonkey