2013-10-01 3 views
8

Questo è ciò che sembra con il simulatore iOS7 quando l'applicazione è solo in esecuzione, senza alcuna interazione da parte dell'utente (anche io non corro alcun codice del mio, solo boilerplate Cocos2d):Cocos2d/iOS7: in continuo aumento l'utilizzo della memoria per il codice boilerplate

enter image description here

Nessun tale questione con 5.0-> 6.1. Il codice di produzione di questo problema è Cocos2d codice standard, che ho cercato di ridurre al minimo, con commenti e questo è il codice minimo da App delegato:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Create the main window 
    window_ = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 


    // CCGLView creation 
    CCGLView *glView = [CCGLView viewWithFrame:[window_ bounds] 
            pixelFormat:kEAGLColorFormatRGB565 
            depthFormat:0 
          preserveBackbuffer:NO 
            sharegroup:nil 
           multiSampling:NO 
           numberOfSamples:0]; 

    director_ = (CCDirectorIOS*) [CCDirector sharedDirector]; 

    director_.wantsFullScreenLayout = YES; 

    // Display FSP and SPF 
    [director_ setDisplayStats:YES]; 

    // set FPS at 60 
    [director_ setAnimationInterval:1.0/60]; 

    // attach the openglView to the director 
    [director_ setView:glView]; 

    [glView setMultipleTouchEnabled:YES]; 

    // 2D projection 
    [director_ setProjection:kCCDirectorProjection2D]; 
    // [director setProjection:kCCDirectorProjection3D]; 

    // Enables High Res mode (Retina Display) on iPhone 4 and maintains low res on all other devices 
    if(! [director_ enableRetinaDisplay:YES]) 
     CCLOG(@"Retina Display Not supported"); 

    // Default texture format for PNG/BMP/TIFF/JPEG/GIF images 
    // It can be RGBA8888, RGBA4444, RGB5_A1, RGB565 
    // You can change this setting at any time. 
    [CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888]; 

    // If the 1st suffix is not found and if fallback is enabled then fallback suffixes are going to searched. If none is found, it will try with the name without suffix. 
    // On iPad HD : "-ipadhd", "-ipad", "-hd" 
    // On iPad  : "-ipad", "-hd" 
    // On iPhone HD: "-hd" 
    CCFileUtils *sharedFileUtils = [CCFileUtils sharedFileUtils]; 
    [sharedFileUtils setEnableFallbackSuffixes:NO];    // Default: NO. No fallback suffixes are going to be used 
    [sharedFileUtils setiPhoneRetinaDisplaySuffix:@"-hd"];  // Default on iPhone RetinaDisplay is "-hd" 
    [sharedFileUtils setiPadSuffix:@"-ipad"];     // Default on iPad is "ipad" 
    [sharedFileUtils setiPadRetinaDisplaySuffix:@"-ipadhd"]; // Default on iPad RetinaDisplay is "-ipadhd" 

    // Assume that PVR images have premultiplied alpha 
    [CCTexture2D PVRImagesHavePremultipliedAlpha:YES]; 

    // Create a Navigation Controller with the Director 
    navController_ = [[MyNavigationController alloc] initWithRootViewController:director_]; 
    navController_.navigationBarHidden = YES; 

    // for rotation and other messages 
    [director_ setDelegate:navController_]; 

    // set the Navigation Controller as the root view controller 
    [window_ setRootViewController:navController_]; 

    // make main window visible 
    [window_ makeKeyAndVisible]; 

    return YES; 
} 

Ho anche commentata CCDirector da directorDidReshapeProjection avvio di eliminare il mio codice. Quindi, quando l'applicazione si avvia ora vedo solo la frequenza dei fotogrammi sullo schermo nero.

Lo stesso risultato che vedo dagli strumenti.

Purtroppo non è possibile testare iOS 7 sul dispositivo, ma non mi aspetto che il simulatore agisca in questo modo.

Aggiornamento:

ho fatto 2 generazioni Segna con il seguente risultato.

enter image description here

Tutti gli articoli sono quei 64 allocazioni di byte. Non ho idea di che tipo siano. Vale la pena menzionare che sto usando l'ultima versione stabile di Cocos2D 2.1.

Aggiornamento # 2:

chiamata pila di 64 allocazione di byte.

enter image description here

+0

Che tipi sono le nuove assegnazioni? Hai usato il pulsante "Mark Generation" in Strumenti? – bneely

+0

@bneely aggiornato il mio post con i risultati – Pablo

+0

Avete eseguito tutte le azioni utente tra le generazioni A e B o è stato l'applicazione in esecuzione da solo? Hai guardato gli stack di chiamate per queste allocazioni? – bneely

risposta

3

Non tanto una risposta come una conferma: sembra essere un problema specifico a iOS 7.0 e 2.1 Cocos2d.

Ho osservato lo stesso comportamento: cocos2d 2.1 su iOS 7.0 simulatore aumenta l'utilizzo della memoria nel tempo. E anche molto, ogni pochi secondi di ~ 1 MB. Ma ignoriamolo, il simulatore non è un vero dispositivo.

Su un dispositivo (iPod touch 5th gen con iOS 7) la memoria è a malapena in aumento. L'utilizzo di generazioni marcate su un periodo di 5 minuti indica una crescita di massimo 15 KB. Occasionalmente c'è un blocco di 10-15 KB allocato ma alla fine si lascia andare, almeno la maggior parte di esso. La quantità di memoria aggiunta e attiva per un periodo di 5 minuti è di circa 5 KB. Non molto, ma anche più di niente per un'app modello che non fa o non risponde a nulla.

La memoria che viene aggiunta e mai rilasciata sul dispositivo è principalmente contrassegnata come <non-object> come nel Simulatore, con alcuni CGPath in mezzo. Quindi questo potrebbe indicare che ci potrebbe essere un problema di gestione della memoria in cocos2d 2.1 su iOS 7 - anche se è troppo piccolo per avere un effetto negativo sulla maggior parte delle app (~ 100 KB "trapelate" all'ora).

Le applicazioni Sprite Kit e OpenGL oltre a funzionare su un simulatore iOS 6 (non ho potuto testare su un dispositivo iOS 6) non mostrano alcun problema, i byte live rimangono stabili con generazioni marcate che non segnalano alcuna crescita .

+0

Per alcune persone potrebbe essere un problema significativo ... Accetto, finalmente dobbiamo testare tutti sul dispositivo, ma durante lo sviluppo è più comodo usare il simulatore. Spero che i ragazzi di Cocos2D possano rilasciare la patch al più presto. – Pablo

+0

Osservo lo stesso con cocos2d 2.0 su iOS7, comportamento dispositivo/simulatore simile a quello appena descritto per cocos2d 2.1. – YvesLeBorg

+0

Il seguente argomento potrebbe descrivere il bug: http://www.cocos2d-iphone.org/forums/topic/cocos2d-2-0-bug-render-time-peaks-endless-memory-allocation-2/page/ 2/e sembra in determinate condizioni anche il dispositivo interessato – Pablo

0

Sei sicuro di non aver abilitato gli oggetti zombi?

Clicca sul prodotto -> Modifica schema ea scheda diagnostica se si è "Abilita oggetti zombie" controllati, deselezionarla e riprovare.

0

So che questo è troppo tardi per rispondere a questa questione, ma basta lasciare qui. C'è un ragazzo che parla di nszoombie, quindi se abiliti il ​​debug di xcode con questa opzione, causerà questo problema. Spegnerlo e controllare di nuovo

Problemi correlati