2010-06-09 16 views
0

Mon application est tout fait et fonctionne très bien. Alors maintenant je l'ai couru sur un vieux iPhone et l'application prend 17,3 secondes pour commencer!?!? J'ai passé beaucoup de temps à le regarder et j'ai trouvé que la raison pour laquelle le chargement est si long est que j'ai beaucoup de vues et que chaque vue a une image de fond png. Tous mes points de vue et fait en IB et dans mon code:longue période de démarrage ... Besoin d'aide

#import "MyTestAppDelegate.h" 
#import "MyTestViewController.h" 

@implementation MyTestAppDelegate 

@synthesize window; 
@synthesize viewController; 


- (void)applicationDidFinishLaunching:(UIApplication *)application {  

    // Override point for customization after app launch 

    [window addSubview:viewController.view]; 
    [window makeKeyAndVisible]; 
} 


- (void)dealloc { 
    [viewController release]; 
    [window release]; 
    [super dealloc]; 
} 
@end 

A la fin du code où est dit:

[window addSubview:viewController.view]; 

l'application semble charger toutes les vues de la pointe à la en même temps. Tous les png de toutes les vues sont d'environ 12mb. L'application n'a pas besoin de charger toutes les vues en même temps au démarrage.

Y at-il un moyen que je ne peux que charger la première vue "d'accueil" au démarrage? (Toutes les vues font partie de la même plume.)

+3

Vous ne devez jamais créer toutes les vues dans le même fichier nib .. Vous devez créer un viewcontroller et un nib séparés pour chaque vue de sorte que la mémoire soit gérée plus efficacement (c'est-à-dire uniquement si nécessaire) – iwasrobbed

Répondre

4

Vous pouvez essayer de diviser vos vues en différentes pointes. L'utilisation d'une seule plume pour un seul UIViewController et UIView semble être la méthode recommandée.

Si vous faites cela, la vue ne sera chargée que lors de son premier accès.

+0

travail? comme il y a 30 vues différentes dans la plume. – Jeff

+0

Cela peut prendre du temps, oui, mais je pense que ça en vaudra la peine. Vous pouvez essayer avec quelques vues en premier, jusqu'à ce que vous vous sentiez à l'aise pour migrer plus d'entre eux. – pgb

+0

Je vais essayer, mais j'ai quelques questions: Comment puis-je partager des variables entre les différents viewControllers? Comment basculer entre les différentes vues nid? Merci pour votre aide, il est grandement apprécié – Jeff

2

Lorsque vous chargez une plume, le runtime instancie tous les objets lyophilisés dans la plume. Si vous avez toutes vos vues dans une seule pointe, chaque vue unique s'initialisera et se chargera même si elle n'est pas visible. Sinon, les liens de la plume ne pourraient pas être résolus.

Habituellement, chaque pointe doit être une paire vue/vue-contrôleur. Les contrôleurs à vues multiples peuvent être placés dans la même plume en toute sécurité, car ils sont généralement des objets relativement légers.

Questions connexes