[Résolu] Leaks instrument

busterTheobusterTheo Membre
octobre 2015 modifié dans API UIKit #1

Bonjour,


je travaille depuis trois jours sur Leaks Instruments, et je deviens chèvre.


 


Je ne sais pas vraiment comment interpréter tout ça.


Je parviens à  faire apparaitre de temps en temps l'endroit ou mon code déconne.


J'ai résolu, il me semble quelques problèmes, puisque les leaks ne sont plus au même endroit.


 


Enfin, j'ai quand même toujours un leak qui persiste.


 


Je met mon code puis des copies écran, dont j'espère avoir une interprétation ou une méthode de pistage de l'erreur.


 


Merci d'avance.


 


En gros, il s'agit de la fabrication du nom d'une photo


dans le :



func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {

avant de l'enregistrer.


L'enregistrement (dans le documentsDir) se fait bien puisque je la réaffiche bien.


à‰galement le nom (en string) dans le coredata.


Donc tout va bien à  part le leak associé.


 


Auparavant je créai le nom avec la date (yyyy-MM-dd-HH-mm-ss) dedans, ainsi le nom de chacune des photos était différent des autres.


 


Pour palier au problème de leaks (car j'ai vu plein de galère sur le web sur les nsDate et NSDateFormatter et NSString...), j'ai donc décider de mettre plutôt un nombre aléatoire dans le nom.


 


Toujours le leaks.


 


J'ai donc mis un nom tout simple



"FrontalAlpha.png" 

et j'ai les mêmes erreurs.



 


string init



 



 


string interpolation segment



 


Les copies d'écran


A.png


 


Si quelqu'un peut m'expliquer les icônes (valises, tasse à  café, ...) de la partie droite - Auparavant j'en avais des tout noir.... et d'autre couleurs.


Je ne trouve nulle part comment les interpréter.


 


Et sur lesquels il faut souligner les bugs.


 


Voici les deux copies d'écran correspondantes aux 8e et 7e icônes en partant du haut.


B.png


 


C.png


 


 


J'ai des leaks sur ipad, je regarde donc tout ça d'abord sur le simulator, et c'est les mêmes problèmes.


 


Au fait, c'est normal que à  chaque fois que je lance instruments (Pom I) sur le simulator aussi, ce soit hyper long, genre 5mns ?


 


Merci d'avance.


Réponses

  • Sur l'ipad, j'ai ça.


     


    De toute façon, c'est toujours sur cette ligne que ça déconne - Même si je met "toto.png".


    D.png


  • Pour ceux qui galèrent comme moi, j'ai enfin trouvé un bon petit tuto.


     


    J'ai pas résolu mon problème, mais j'apprend à  pister.

  • PyrohPyroh Membre
    octobre 2015 modifié #4

    Y'a une raison particulière pour que tu type toutes tes chaines en NSString


    Si la réponse est non laisse le inférer le type String en ne mettant rien. On va déjà  commencer par ça.


  • Merci Pyroh pour ta réponse, tu as certainement raison, mais en attendant, j'en profite pour régler pas mal de problèmes dans mon code, susceptibles de gonfler la mémoire consommée


     


    Voir ce post.


     


    Je reviens ici bientôt.


  • busterTheobusterTheo Membre
    octobre 2015 modifié #6

    Me revoilou.


     


    ça ne change rien avec String. J'ai toujours des leaks quand je charge l'image avec le picker.


     


     


    J'ai repéré ce truc !!!



     


    CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__"    --> 100%



     


     


    Une idée ?


     


    Le code :



    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
    let imagePickee: UIImage = info[UIImagePickerControllerOriginalImage] as! UIImage

    if nomTextField.text == nil || nomTextField.text == "" {
    nomTextField.text = "Nom_manquant"
    }

    if let newImageScaled = scaledImageWithImage(imagePickee, size: taillePhotos) as UIImage? {
    let documentsDir = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask, true)[0] as! String

    var dateFormat = NSDateFormatter()
    dateFormat.dateFormat = "yyyy-MM-dd-HH-mm-ss"
    let now: NSDate = NSDate(timeIntervalSinceNow: 0)
    let theDate: NSString = dateFormat.stringFromDate(now)

    switch(self.lastTappedImageView!.tag) {
    case 1:
    if let newVignetteScaled = scaledImageWithImage(imagePickee, size: tailleVignettes) as UIImage? {
    frontalPatientImageView?.image = newVignetteScaled
    }

    if listeDesVariables.frontalPatientFullURL == "" {
    compteurPhotos = compteurPhotos + 1
    }

    listeDesVariables.frontalPatientFullURL = "Frontal\(nomTextField.text)\(theDate).png"
    let pathFull: String = documentsDir + "/" + listeDesVariables.frontalPatientFullURL

    let pngFullData: NSData = UIImagePNGRepresentation(newImageScaled)
    pngFullData.writeToFile(pathFull as String, atomically: true)
    case 2:

    etc...

  • busterTheobusterTheo Membre
    octobre 2015 modifié #7

    En fait, le problème semble complètement débile.


     


    J'ai un Leaks sur le imagePickerController (didFinishPickingMediaWithInfo), d'après ce que j'ai pu trouver sur Instruments.


    Mais on ne m'en dit pas plus.


     


    J'ai donc, petit à  petit, mis en commentaire toutes mes lignes de code, et j'en arrive donc à  un code de base, avec toujours le même Leaks.


     


    Là , je suis bluffé, et j'aimerai bien qu'on m'explique pourquoi y'a un Leaks, alors que y'a plus de code.


     


    Voilà  la méthode - J'ai tout viré, et ça fait un Leaks :



    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
    let imagePickee: UIImage = info[UIImagePickerControllerOriginalImage] as! UIImage
    frontalPatientImageView?.image = imagePickee
    }

    Génial, non ?


     


    Voilà  ce que je récupère dans Instruments :



     


    +0x6e callq               "GuideEsthetique.Etape0ViewController.imagePickerController (GuideEsthetique.Etape0ViewController)(ObjectiveC.UIImagePickerController, didFinishPickingMediaWithInfo : [ObjectiveC.NSObject : Swift.AnyObject]) -> ()"


    +0x73 addq                $64, %rsp


     


     


    Là , faut qu'on m'explique. Y'a un truc qui me dépasse.


     


    Mon imageView est ainsi :


    Au départ :



    var frontalPatientImageView: UIImageView!

    Puis à  sa construction :



    frontalPatientImageView = UIImageView(frame: CGRectMake(0, 0, 170, 135))
    viewVignetteFrontalPatient.addSubview(frontalPatientImageView)

    Ces views sont imbriquées car il y a une histoire d'ombre et de masque...


     


    Voilà , si quelqu'un a une idée, parce que là  je suis vraiment bloqué.


    Je vois pas d'où peut venir le problème.


     


    Merci d'avance.


  • Bon, j'ai mis une imagerie bidon, et ça déconne plus.



    test?.image = imagePickee

    ça veut dire que ça viendrait de mon imagerie de base qui est imbriquée dans un masque avec une ombre.


     


    Faut que je trafique ça. Pffff


     


    Désolé pour le dérangement.


     


    Mais si quelqu'un a une idée, je met quand même le code de la construction de l'image masquée et ombrée.


     


    Merci d'avance.


     


    En tout cas, ça se précise. Génial.


     


    Mais Instruments n'est d'aucune aide. Je croyais que c'était un programme génial.


    Rien ne vaut le debtggage à  l'ancienne.


     


    Je sais, y'a des magicNumbers 



    // FrontalPatient

    // 0- Ombre
    viewOmbreVignetteFrontalPatient = UIView(frame: CGRectMake(32, 425, 170, 205))
    viewOmbreVignetteFrontalPatient.backgroundColor = FondsColor
    viewOmbreVignetteFrontalPatient.layer.cornerRadius = 5.0
    viewOmbreVignetteFrontalPatient.layer.shadowColor = UIColor.blackColor().CGColor
    viewOmbreVignetteFrontalPatient.layer.shadowOffset = CGSize(width: 1, height: 1)
    viewOmbreVignetteFrontalPatient.layer.shadowOpacity = 0.5
    viewOmbreVignetteFrontalPatient.layer.shadowRadius = 5
    self.view.addSubview(viewOmbreVignetteFrontalPatient)
    // 1- Box
    viewVignetteFrontalPatient = UIView(frame: CGRectMake(32, 425, 170, 205))
    viewVignetteFrontalPatient.backgroundColor = FondsColor
    viewVignetteFrontalPatient.layer.cornerRadius = 5.0
    self.view.addSubview(viewVignetteFrontalPatient)
    // 2- Photo
    frontalPatientImageView = UIImageView(frame: CGRectMake(0, 0, 170, 135))
    viewVignetteFrontalPatient.addSubview(frontalPatientImageView)
    // 3- Masque
    viewMaskFrontalPatient = UIView(frame: CGRectMake(0, 0, 170, 205))
    viewMaskFrontalPatient.backgroundColor = FondsColor
    viewMaskFrontalPatient.layer.cornerRadius = 5.0
    viewVignetteFrontalPatient.addSubview(viewMaskFrontalPatient)
    // Masking
    viewVignetteFrontalPatient.maskView = viewMaskFrontalPatient
  • busterTheobusterTheo Membre
    octobre 2015 modifié #9

    Désolé, chevauchement avec un autre post.


     


    Où j'explique ma solution et quelques précisions.


     


    :p   :p   :p


Connectez-vous ou Inscrivez-vous pour répondre.