IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Objective-C Discussion :

+ (void)initialize et liberation memoire


Sujet :

Objective-C

  1. #1
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 156
    Points : 76
    Points
    76
    Par défaut + (void)initialize et liberation memoire
    Bonjour a tous,

    Je debute avec l'Objective-C et apres avoir lu divers choses, il semblerait que la methode de class '+ (void)initialize' soit le meilleur endroit pour initialiser des variables globales "static". Voici le bout de code en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    static NSArray *tableCellBackgrounds = nil;
     
    + (void)initialize
    {
    	if (self == [VariableDisplayViewController class])
    	{
    		tableCellBackgrounds = [NSArray arrayWithObjects:
    			[[UIImage imageNamed:@"ListLine_Pair.png"] stretchableImageWithLeftCapWidth:40 topCapHeight:27],
    	        [[UIImage imageNamed:@"ListLine_Impair.png"] stretchableImageWithLeftCapWidth:40 topCapHeight:27],
    	        nil
    	    ];
    		[tableCellBackgrounds retain];
    	}
    }
    Le probleme, c'est que je ne sais pas a quel moment envoyer le message 'release'...Y a-t-il une methode de classe qui serait appropriee pour cela ?

    Merci !

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 957
    Points : 4 386
    Points
    4 386
    Par défaut
    Citation Envoyé par j0o0 Voir le message
    Bonjour a tous,

    Je debute avec l'Objective-C et apres avoir lu divers choses, il semblerait que la methode de class '+ (void)initialize' soit le meilleur endroit pour initialiser des variables globales "static". Voici le bout de code en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    static NSArray *tableCellBackgrounds = nil;
     
    + (void)initialize
    {
    	if (self == [VariableDisplayViewController class])
    	{
    		tableCellBackgrounds = [NSArray arrayWithObjects:
    			[[UIImage imageNamed:@"ListLine_Pair.png"] stretchableImageWithLeftCapWidth:40 topCapHeight:27],
    	        [[UIImage imageNamed:@"ListLine_Impair.png"] stretchableImageWithLeftCapWidth:40 topCapHeight:27],
    	        nil
    	    ];
    		[tableCellBackgrounds retain];
    	}
    }
    Le probleme, c'est que je ne sais pas a quel moment envoyer le message 'release'...Y a-t-il une methode de classe qui serait appropriee pour cela ?

    Merci !
    "+ (void)initialize" est appelé à l'initialisation du programme lorsque le runtime charge les classes, il n'y a pas de pendant à la fin du programme.
    Il est assez délicat d'appeler du code Objective-C à ce moment-là puisque rien ne vous dit dans quel ordre les classes sont initialisées même si la probabilité que vos classes soient initialisées après celles des frameworks est très importante, vu que l'ordre est quand même "top-down".

    Vous devez encapsuler votre "tableCellBackgrounds" dans une classe singleton dont les "VariableDisplayViewController" seront clients, et si vous n'avez qu'un seul "VariableDisplayViewController" dans votre programme, cela peut être lui le singleton.

    Ne jouez pas avec "+ (void)initialize" : c'est du bas niveau qui n'est nécessaire dans aucun programme classique.

Discussions similaires

  1. probleme de liberation Memoire firefox
    Par pcouas dans le forum Applets
    Réponses: 3
    Dernier message: 23/04/2008, 16h42
  2. Liberation memoire chaine de caractere
    Par BatuBou dans le forum C
    Réponses: 12
    Dernier message: 12/01/2008, 04h52
  3. probleme liberation memoire avec JTextArea
    Par iutcien dans le forum AWT/Swing
    Réponses: 12
    Dernier message: 12/12/2006, 13h06
  4. Pb: liberation mémoire textures
    Par icareo dans le forum OpenGL
    Réponses: 2
    Dernier message: 18/07/2006, 00h49
  5. liberation memoire "free"
    Par elghadi_mohamed dans le forum C
    Réponses: 6
    Dernier message: 12/07/2006, 17h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo