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 :

Fuite mémoire ?


Sujet :

Objective-C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Fuite mémoire ?
    Bonjour à tous, je suis nouveau par ici donc j'espère que je vais faire comme il faut....

    Alors voici mon problème :
    J'ai bien lu le livre de notre chère Aaron Hillegass et j'arrive à programmer un certain nombre de choses (qui fonctionnent en plus...) mais dans l'exemple de l'application Raiseman (entre autre), il créé dans Interface Builder un objet qu'il attribue a une classe "AppController" (peu importe) puis il fait ensuite pointer son menu Préférences sur la méthode :
    - (IBAction)showPreferenceWindowNSNotification *)aNotification;

    Dans l'implémentation de la méthode, il fait un [[XXClass alloc] init] mais je ne vois pas d'implémentation du dealloc.

    Ma question est donc : N'y a-t-il pas une fuite du mémoire du coup ?

    D'après ce que j'ai compris (et c'est là que je ne suis pas certain....), quand l'application charge le .nib (ou .xib sans importance), il va créer un nouvel objet (AppController en l'occurrence) où il fait ensuite le lien entre le menu et la méthode dans le AppController.
    Quand est-ce que l'objet AppController est libéré ?

    Merci d'avance !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 629
    Points : 10 554
    Points
    10 554
    Par défaut
    Réponse vite-faite
    • Un fichier .xib est un fichier XML, résultat d'Interface Builder (tu peux l'éditer "à la main"). Un fichier .nib est le résultat de la compilation d'un fichier .xib
    • On appelle jamais dealloc mais release [XXXClass release]
    • Il y a deux méthodes pour charger les vues:
    • 1) Soit on configure le projet pour qu'il charge une vue principale, un xib ou un storyboard et effectivement il faut correctement ajouter le contrôleur principal dans sa vue principale (automatique pour les storyboards il me semble), sinon rien ne se passe.
    • 2) Soit dans la fonction main, on charge le "AppDelagate", via la réflection et ensuite on crée le contrôleur principal en passant le xib en paramètre du constructeur sans oublier l'attribut rootViewControler (mais tout est dans le squelette généré par XCode)
    • Tu as les instruments pour mesurer les fuites mémoires, entre autres: About Instruments


    Quand est-ce que l'objet AppController est libéré ?
    On s'en fiche
    Mais en théorie, si tu suis la programmation Apple "1 contrôleur par vue", il est détruit avec la vue

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse rapide.

    Ok pour le message release, ca j'ai bien compris. Mais théoriquement, quand le retain count arrive à 0, la méthode dealloc de l'objet est bien appelée.
    Or dans on cas, pour le fichier MainMenu.xib, le File's Owner est NSApplication puisque ce n'est pas moi qui ait instancié cet object directement.
    Donc dans le .xib, j'ajoute un nouvel objet AppController que je lie à mon fichier AppController.h/.m

    Dans AppController.m, j'ai entre autre, ma fonction showPreferenceWindow: qui est appelée par mon menu. Dedans, je fais [[... alloc] init] de mon objet préférences.
    Je pensais que pour être correcte, il fallait que je recode la méthode dealloc et que je fasse un release de mon objet préférence.
    Mais la méthode dealloc de AppController n'est jamais appelée ?????.....
    C'est là que ça me pose un problème. Est ce que mon objet preference va être libéré ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 629
    Points : 10 554
    Points
    10 554
    Par défaut
    C'est difficile de répondre sans un bout de code, mais il doit avoir un autorelease quelque part

    Sinon, un conseil, oublie cette méthode et regarde directement les xibs et ensuite les storyboards

    Working with .xib Files

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Je ne connais pas les storyboard mais je regarderai.
    Le problème se pose surtout pour la gestion du menu. Après, pour les autres fenêtres, je n'ai pas besoin de controllers supplémentaires.

    C'est juste que je me posais la question comme c'est ce qui est écrit dans le livre d'Aaron Hillegass et dans les exemples que l'on peut télécharger sur son site...

    En tout cas merci pour ton aide !

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 629
    Points : 10 554
    Points
    10 554
    Par défaut
    Il est marrant le monsieur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    - (IBAction) addReminder: (id) sender
    {
        NSDate *date = self.datePicker.date;
        NSLog(@"Setting a reminder for %@", date);
     
        UILocalNotification *note = [[UILocalNotification alloc] init];
        note.alertBody = @"Hypnotize me!";
        note.fireDate = date;
     
        [[UIApplication sharedApplication] scheduleLocalNotification:note];
    }
    Documentation d'Apple:
    - (void) scheduleLocalNotification: (UILocalNotification*) notification
    Parameters

    notification

    A local notification that the operating system delivers for the app at the date and time specified in the fireDate property of notification. Because the operating system copies notification, you may release it once you have scheduled it.
    Et même il y a peut-être plus grave que cela parce que la notification peut appeler la méthode application:didFinishLaunchingWithOptions:
    In the application:didFinishLaunchingWithOptions: method the application delegate can obtain the UILocalNotification object from the passed-in options dictionary by using the UIApplicationLaunchOptionsLocalNotificationKey key.

Discussions similaires

  1. [tomcat][memoire] java.net.URL et fuite mémoire
    Par Seiya dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 09/03/2009, 10h41
  2. [Fuites mémoire] Je cherche un utilitaire
    Par 10_GOTO_10 dans le forum C++Builder
    Réponses: 8
    Dernier message: 10/02/2005, 10h03
  3. Outil de recherche de fuite mémoire
    Par eag35 dans le forum MFC
    Réponses: 4
    Dernier message: 02/02/2005, 12h46
  4. [SWT]SWT et fuite mémoire(ou pas)
    Par menuge dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 22/06/2004, 21h40
  5. [debug] fuites mémoires
    Par tmonjalo dans le forum C
    Réponses: 3
    Dernier message: 28/07/2003, 17h20

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