Quand je suis passé en Objective C (iOS) en C ++ (et en Java), j'avais du mal à comprendre la memory management dans iOS. Mais maintenant tout cela semble naturel et je sais retenir, autorelease, copyr et libérer des trucs. Après avoir lu au sujet de l'ARC, je me request s'il y a plus d'avantages à utiliser ARC ou si c'est juste que vous n'avez pas à vous soucier de la memory management. Avant de passer à l'ARC, je voulais savoir comment la valeur passait à l'ARC.
Voici mon sharepoint vue spécifique sur ARC:
1) XCode a le menu "Convertir en Objective C ARC". Est-ce que la conversion est aussi simple (rien à craindre)?
C'est simple. Ça marche. Utilise le. Comme Kevin Low le fait remarquer, vous devrez passer en revue et corriger les bits où vous utilisez des objects de base de base. Cela exigera juste une __bridge
saine de __bridge
ou de __bridge_transfer
cependant.
2) Est-ce que cela m'aide à réduire la memory de mes applications, les traces de memory, les memory leaks, etc. (en quelque sorte?)
Non, pas vraiment. OK, en quelque sorte. Cela aidera à réduire les memory leaks là où vous avez mal codé précédemment. Cela ne réduit pas l'empreinte memory.
3) At-il beaucoup d'impact sur mes applications?
Pas du tout.
4) Quels sont les avantages non évidents?
L'avenir. Il y aura plus à venir sur le bonus que le compilateur prend une connaissance complexe de la façon dont les objects sont comptés. Par exemple, ARC fournit déjà la belle optimization objc_retainAutoreleasedReturnValue
, ce qui est très agréable.
5) Y a-t-il un désavantage à y aller?
Pas du tout.
Veuillez me croire sur parole et commencer à utiliser ARC. Il n'y a aucune raison (IMO) de ne pas le faire, donc les avantages dépassent définitivement les inconvénients!
Pour un examen approfondi de la façon dont ARC fonctionne pour peut-être vous aider à vous convaincre que c'est bien, veuillez jeter un coup d'œil à mes articles de blog intitulés «Un regard sous le capot d'ARC» – ici , ici , ici et ici .
Voici ce que vous devez vraiment savoir sur ARC:
Le compilateur comprend mieux Objective-C et Cocoa que vous. Je ne dis pas cela comme une insulte; il le comprend mieux que moi. Je pense que vous pourriez dire qu'il comprend mieux les règles que tout, mais peut-être une douzaine de personnes dans le monde entier. Et il connaît des astuces pour les utiliser à un degré que vous et moi ne pouvons pas répéter, même si nous comprenons aussi bien que lui.
Le rest est juste des détails:
Si vous utilisez Core Foundation ou un code non-Objective-C, ce n'est pas aussi simple que de passer manuellement votre code et de vous assurer que toutes les conversions entre Objective-C et Core Foundation sont comblées (si vous en avez moules). Vous devrez également gérer la memory pour le code non-Objective-C.
Il est censé s'occuper essentiellement de toutes les memory leaks pour vous, car il automatise la conservation, la libération, la copy, etc. Jusqu'à présent, je n'ai jamais eu de fuite d'Objective-C depuis le passage à ARC.
Non. La construction peut prendre un peu plus de time car elle doit parcourir tout votre code et insert tous les codes de retenue et de libération.
Je ne sais pas s'il y en a. En fin de count, tout ARC est, est un automateur.
Vous aurez à apprendre sur les moulages pontés ainsi que vous ne pouvez pas build pour rien de less que iOS 4.
En fin de count, ça vaut vraiment le coup. J'étais sceptique au début, mais après avoir regardé la video WWDC où ils expliquent comment cela fonctionne, je l'ai aimé de plus en plus.
Avez-vous lu la documentation d'Apple sur ARC ? Cela répond à beaucoup de questions que vous posez.
Basé sur mon expérience, voici ce que je pense:
3) Vous devriez re-tester vos applications, mais selon mon expérience, cela fonctionnera à peu près. Regardez très attentivement tous les avertissements du compilateur !!!
4) Avantages non évidents: il est vraiment plus rapide de coder quand vous n'avez pas à penser à la memory management. C'est peut-être évident, mais le montant que cela m'a aidé m'a quand même surpris.
5) Inconvénients: Vraiment le seul inconvénient est d'avoir à désactiver ARC pour certaines bibliothèques tierces.
L'ARC a été si utile que je ne vais tout simplement plus coder sans elle. Il n'y a aucune raison d'avoir à faire face à tout cela et cela fonctionne assez bien dans la pratique.
Regardez la video WWDC sur ARC: https://developer.apple.com/videos/wwdc/2011/?id=323
La position officielle d'Apple dans cette video est que toutes les applications qui peuvent utiliser ARC devraient utiliser ARC. La video va dans pourquoi, et est un excellent aperçu de la technologie, donc je ne vais pas tout répéter ici.
J'ai découvert: ARC rend votre code beaucoup plus rapidement. Dans la video WWDC d'Apple, ils disent que quelques cycles de CPU sont enregistrés pour les methods de conservation et de libération de chaque object NSObject. C'est parce qu'il n'est plus nécessaire de le vérifier au moment de l'exécution (il est maintenant sous-traité au compilateur). Il s'agit d'environ 6 cycles de CPU pour chacun conserver. Si vous utilisez une boucle qui crée beaucoup d'objects, vous pouvez vraiment sentir la différence.
ARC non seulement rend le code plus rapide, mais vous écrivez less de code, ce qui accélère considérablement votre process de développement. Et last but not least, vous ne devez pas searchr des memoryleaks d'environ 90% de votre code. Si vous n'utilisez pas beaucoup de choses de bas niveau, qui doivent utiliser "__bridge jets", vous êtes complètement à court de memory leaks.
Conclusion: Si vous pouvez le faire, FAITES-LE!