Si les langages Objective-C et Swift sont garbage collected alors comment les produits MacOS, iOS & Apple sont si performants, durables et efficaces, contrairement aux déclarations populaires selon lesquelles les langages avec GC/gestion automatique de la mémoire ne sont pas adaptés au développement de systèmes ?


En premier lieu, la raison est que Obj-C est essentiellement du C. Et dans le cas de cette question, il est très proche de l'assemblage métal nu. Oui il y a un overhead est la séquence de distribution de résolution de message mais encore une fois comme un langage de type C qui peut être atténué.

La façon comme une simplification grossière de la façon dont Garbage Collection/ARC (Automatic Reference Counting) est bien documenté. Cependant c'est une étape facile de visualiser un chien en laisse tant qu'une personne est intéressée par ce chien il a une référence. Lorsque personne ne "possède" ce chien. Alors il est programmé pour la désaffectation.


En Java cette désaffectation peut se produire à un moment indéterminé. Comme c'est la nature de Java. Dans la fonctionnalité Obj-C, il existe une macro de préprocesseur qui enveloppe essentiellement chaque pointeur dans des cycles de rétention/libération sûrs pour la mémoire. Par lequel ces objets seront vidés de la mémoire à la fin du sous-programme ou très peu de temps après.

Dans le Java moderne, cela est moins indéterminé cependant nulle part aussi granulaire que dans Obj-C. En outre Obj-C sait quoi faire avec nil en entrée ou en sortie, ce qui compense fondamentalement de nombreuses inefficacités

.