2013-02-12 102 views
0

我有一個問題,真的做我的頭的Xcode工具 - 無法找到泄漏

所以基本上我有一個MainMenuScene,這反過來創建一個測試層。該圖層非常簡單,因爲它只創建一個分數標籤和一個添加到菜單中的按鈕。 按下此按鈕後,MainMenuScene將被替換爲空白場景,然後再次加載MainMenuScene。

到目前爲止這麼好。然而,問題是每次重新加載場景時,我都會在樂器中堆積一堆,我會得到大約20kb的堆積。當我在擴展視圖中深入挖掘時,似乎來自testLayer的精靈和字體沒有被釋放,但圖層中的dealloc方法正在被調用。

除了核心Cocos文件外,我還爲我的文件添加了ARC支持。這可以以任何方式相關嗎?

下面是測試層:

@implementation TestLayer 

-(id)init 
{ 
    self = [super initWithColor:ccc4(2,2,2,210)]; 
    if (self != nil) 
    { 
     // ask director the the window size 
    CGSize s = [[CCDirector sharedDirector] winSize]; 

     self.isTouchEnabled = YES; 

     NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
     formatter.numberStyle = NSNumberFormatterDecimalStyle; 

     NSNumber * n = [NSNumber numberWithInt:[SDCloudUserDefaults integerForKey:@"highscore"]]; 

     NSString *string = [formatter stringFromNumber:n]; 

     //score 
     CCLabelBMFont * scoreLabel = [CCLabelBMFont labelWithString:string fntFile:@"scoreFont.fnt" width:s.width alignment:kCCTextAlignmentCenter]; 
     scoreLabel.position = ccp(POS_X(443), POS_Y(877)); 
     [self addChild:scoreLabel z:90]; 

     //PLAY BUTTON 
     CCMenuItemSprite *playButton = [CCMenuItemSprite itemFromNormalSprite:[CCSprite spriteWithFile:@"play_up.png"] 
                   selectedSprite:[CCSprite spriteWithFile:@"play_down.png"] 
                     target:self 
                    selector:@selector(Transition:)]; 

     playButton.position = ccp(POS_X(380) , POS_Y(177)); 

     menu = [CCMenu menuWithItems: playButton, nil]; 
     menu.position = ccp(0, 0); 
     [self addChild: menu]; 

     } 
    return self; 
} 

-(void) Transition:(ccTime) dt 
{ 
    [self unschedule:@selector(Transition:)]; 
    [[SceneManager sharedSceneManager]RunSceneWithID:SCENE_LOADING:eCCTransitionCrossFade:1.0f]; 

} 

- (void) dealloc 
{ 
    NSLog(@"%s",__FUNCTION__); 
} 
@end 

我實在看不出有什麼錯。

感謝

+0

什麼是提示您的優化?你是否遇到了內存崩潰? 20K的堆積鏡頭差異聽起來對我來說聽起來不是很多。這只是預先優化?我可以理解,它讓你困惑,記憶力正在增長。它也會打擾我,但這是一個問題嗎? – 2013-02-13 03:07:51

+0

@Matt長的尺寸只有20kb,因爲它是一個小測試層。如果我使用原始圖層,泄漏量約爲400kb :( – 2013-02-13 15:56:43

回答

0

對,我沒有上unARCed項目相同的測試與所有正確調用[超級的dealloc]等,並得到了完全相同的行爲。

但是,仔細檢查之後,我仍然不確定是否有泄漏或者我沒有正確解釋結果。

所以我有一個初始狀態的程序,並採取heapshot。然後按下ui按鈕,使場景被替換,然後重新加載。我回到最初的狀態,並採取另一堆照片,並注意到堆增長了20kb左右。當我再次按下ui按鈕時,以前的heapshot會回到零字節。這樣做了幾次之後,以前的heapshot始終回到零字節。

因爲在cocos2d中,每次更換一個場景時,所有附加到該場景的內容都將被釋放,當您回到它時,所有內容都會重新分配。所以我認爲總會有一個堆增長,因爲增長是場景的大小,並且這個層是一個孩子。這有意義嗎?

另外我注意到,每次我這樣做,統計中的#Living列都沒有增加,這是一個好兆頭,對吧?