ARC conseillé par Apple

Bonjour,



J'ai participé à  une réunion cocoheads hier soir. Et j'ai entendu dire qu'Apple allé conseiller les développeurs d'utiliser ARC et de ne plus gérer le garbage collector.



J'ai voulu ouvrir un débat sur ce sujet qui est important de mon point de vue.



Après une mini étude, j'ai vu qu'il y avait des solutions afin de gérer la migration vers ARC, qu'en pensez-vous de ces outils ?



Merci pour vos réponses.
Mots clés:

Réponses

  • Déjà  tu te places dans quel cas ?



    Car sous iOS le garbage collector n'existe pas.

    Ensuite il me semble qu'il est abandonné à  partir de ML.



    Enfin, Apple recommande d'utiliser ARC depuis le début.



    Je pense qu'on viendra tous à  y migrer quand les différentes apps que l'on fait ne devront pas être compatible avec un OS inférieur à  la quatrième version (sous iOS j'entends).
  • Personnellement je vais attendre deux ou trois ans avant de considérer ARC comme utilisable.



    Quand Apple a sorti le GC sous Leopard, ils ont passé Xcode dessus pour faire style "ça marche regardez, allez-y". Aujourd'hui ils abandonne le support par ce que le principe du GC, c'est de la merde.



    Maintenant on nous propose ARC, fonctionnement déterministique de la gestion mémoire basé sur des règles de nomage de fonction et de l'analyse statique de code. Comme on l'a déjà  dit mainte fois, ARC écris du code pour vous mais ne pense pas pour vous, il faut quand même savoir comment fonctionne la mémoire et comment pense ARC pour s'en servir sans plus de casse qu'autre chose.



    De fait je préfère gérer ma mémoire à  la main, le principe du retain / release c'est tout sauf compliqué et l'avoir sous les yeux permet d'être certain de ce qu'il se passe.
  • CéroceCéroce Membre, Modérateur
    juillet 2012 modifié #4
    Je m'y suis mis pour quelques applications dernièrement, et mon expérience m'a convaincu qu'ARC est une réussite:



    - le code est plus lisible, puisqu'il n'est pas encombré de retain/release/autorelease

    - Il n'est plus nécessaire d'établir la liste des propriétés et variables d'instance pour les libérer dans -dealloc.

    - le code est plus simple. Par le passé, il était parfois nécessaire d'implémenter une méthode déléguée juste pour libérer la mémoire.

    - il y a moins de bugs liés à  des erreurs stupides



    Pour ce qui est des inconvénients:



    - Ne dispense pas de connaà®tre les mécanismes de gestion de la mémoire (je te rejoins Yoann)

    - Dispo seulement à  partir de iOS 5 / Mac OS 10.7 (oui, je sais que ça fonctionne partiellement sous iOS 4.3).

    - Oblige à  programmer à  la façon d'Apple. (Je ne suis pas certain qu'il s';agisse d'un inconvénient).





    Dans l'ensemble, je trouve qu'on gère déjà  bien trop de détails dans les programmes Objective-C, alors un système de gestion de la mémoire évolué, même un ramasse-miettes n'est pas un luxe. Ce que je préfère dans ARC est que le programmeur conserve tout de même le contrôle.
  • Je crois me rappeler avoir lu quelque part qu'en ARC les propriétés weak passent à  nil lorsque l'objet attaché est désalloué.
  • Le garbage collector sera deprecated avec Mountain Lion effectivement.



    Moi je ne l'utilise encore que très peu, mais je m'y met de plus en plus et c'est vraiment sympa.



    En ce qui concerne les properties weak, ça sera vraiment excellent, mais c'est compatible qu'à  partir de iOS 5.0, donc tant qu'on doit gérer iOS 4.0 dans nos applis c'est inutilisable. Par contre dès qu'on passera à  iOS 5 et +, je pense que ARC apportera vraiment beaucoup.
  • J'utilise ARC sur un nouveau projet (iOS) depuis quelques mois (pour l'anecdote j'ai adopté Storyboard en même temps). Pour résumer le retour de mon expérience : pareil que Céroce.
  • AliGatorAliGator Membre, Modérateur
    Les propriétés weak existent sous iOS 4.3 il me semble, mais par contre elles sont juste non-zeroing... ce qui enlève un peu de leur intérêt (ça revient à  un "assign"). Alors que sous iOS5+, ce sont des zeroing weak references, donc qui se remettent à  zéro (nil) quand l'objet n'existe plus. Et là  ça commence à  être intéressant.
  • Si vous voulez des weak references qui se remettent à  zéro même sous iOS 4 et MacOS X 10.6 quand vous utilisez ARC, utilisez tout simplement ça : https://github.com/plausiblelabs/PLWeakCompatibility
  • zoczoc Membre
    juillet 2012 modifié #10
    'yoann' a écrit:
    basé sur des règles de nomage de fonction et de l'analyse statique de code


    Oui, et non....



    Les respect des règles de nomage n'est de toute façon pas une nouveauté puisque c'était déjà  le cas avant ARC...





    ARC n'utilise absolument pas l'analyse statique de code, mais un algorithme bien plus déterministe. Les séances de la WWDC de l'année dernière à  propos d'ARC (la session 322, voir vidéo à  partir de 29:40 notamment) insistent bien sur ces points, démonstrations à  l'appui de ce que fait le compilateur.
  • AliGatorAliGator Membre, Modérateur
    Ca m'intéresse cette session, par contre dans les vidéos de la WWDC2011, la 322 c'est "Objective-C Advancements in Depth", alors que la 323 c'est "Introducing ARC"... c'est bien de la 322 dont tu voulais parler zoc ? Que je télécharge la bonne tant qu'à  faire image/wink.png' class='bbc_emoticon' alt=';)' />
  • Oui c'est bien la 322.



    Elle aborde en détail ce que fait le compilateur (en gros rajouter des retain/release entre chaque ligne de code, puis passer un optimiseur qui va virer ceux qui ne sont pas nécessaires... Je caricature mais l'algo se rapproche de ça).



    La 323 n'est qu'une introduction à  l'utilisation d'ARC qui n'entre pas du tout dans les détails d'implémentation.
  • Merci pour cette information zoc, je vais également regarder cette session ! (La 323 aussi, ça ne fera pas de mal image/smile.png' class='bbc_emoticon' alt=':)' /> )

    Je vous remercie également pour toutes ces précisions sur le sujet image/wink.png' class='bbc_emoticon' alt=';)' />
Connectez-vous ou Inscrivez-vous pour répondre.