2009-09-03 6 views
0

Qu'arrive-t-il aux informations d'état conservées par la variable d'une classe après un retour d'une situation de mémoire insuffisante?Schéma de persistance et données d'état pour les situations de faible mémoire (iphone)

Je sais que les vues seront déchargées puis rechargées plus tard, mais qu'en est-il des classes auxiliaires & qui y sont utilisées par le contrôleur qui a lancé la vue?

Exemple de scénario en question:

@interface MyCustomController: UIViewController 
{ 
    ServiceAuthenticator *authenticator; 
} 

-(id)initWithAuthenticator:(ServiceAuthenticator *)auth; 

// the user may press a button that will cause the authenticator 
// to post some data to the service. 
-(IBAction)doStuffButtonPressed:(id)sender; 
@end 

@interface ServiceAuthenticator 
{ 
    BOOL hasValidCredentials; // YES if user's credentials have been validated 
    NSString *username; 
    NSString *password; // password is not stored in plain text 
} 

-(id)initWithUserCredentials:(NSString *)username password:(NSString *)aPassword; 

-(void)postData:(NSString *)data; 
@end 

Le délégué de l'application crée la classe ServiceAuthenticator avec des données utilisateur (lire le fichier plist) et la classe se connecte à l'utilisateur du service à distance.

à l'intérieur du applicationDidFinishLaunching de MyAppDelegate:

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

    ServiceAuthenticator *auth = [[ServiceAuthenticator alloc] initWithUserCredentials:username password:userPassword]; 

    MyCustomController *controller = [[MyCustomController alloc] initWithNibName:...]; 
    controller.authenticator = auth; 

    // Configure and show the window 
    [window addSubview:..]; 

    // make everything visible 
    [window makeKeyAndVisible]; 

} 

Ensuite, chaque fois que l'utilisateur appuie sur un certain bouton 'doStuffButtonPressed de MyCustomController' est invoquée.

-(IBAction)doStuffButtonPressed:(id)sender 
{ 
    [authenticator postData:someDataFromSender]; 
} 

l'authentificateur chèques en tournant à si l'utilisateur est connecté (variable BOOL indique l'état d'ouverture de session) et si oui, échange des données avec le service distant. Le ServiceAuthenticator est le type de classe qui valide les informations d'identification de l'utilisateur une seule fois et tous les appels suivants à l'objet seront postData.

Une fois un scénario de faible mémoire se produit et se décharger la pointe associée & MyCustomController - quand il est rechargé, quel est le processus de réinitialisation la classe « ServiceAuthenticator » & son ancien état?

Je persiste périodiquement toutes les données de mes classes de modèle réelles. Devrais-je considérer aussi la persistance des données d'état dans ces classes de style utilitaire? Est-ce le modèle à suivre?

+0

Quelqu'un at-il des idées sur un bon régime au moins juste pour traiter des variables d'état utilisées pour effectuer une transaction à travers un service Web? –

Répondre

0

Si vous ne gérez pas l'avertissement de mémoire insuffisante dans vos classes d'utilitaires, les données ne sont pas libérées, vous n'avez donc pas à en persister l'état.

Questions connexes