La fonction peut renvoyer un CGPoint
car la structure est "suffisamment petite" pour être renvoyée directement à partir d'une fonction. Vous ne renvoyez pas un pointeur, vous renvoyez le tout directement. Même avec des méthodes qui prennent CGPoints
comme paramètres - vous pouvez passer le tout par valeur directement. Comme Dave le fait remarquer, les CGPoints ne sont pas des objets, ils ne sont que des struc- tures. CGPointMake
ne "alloue" pas de mémoire. C'est juste une fonction qui retourne un struct mis en place avec les bonnes tailles, que vous capturez habituellement dans un local sur votre propre pile ou passez le long ou autre chose.
Comme tout type de primitif (int, float ou autre structure), il n'a pas besoin d'être libéré lorsqu'il sort de la portée. (Note: de nombreuses architectures/compilateurs/"interfaces binaires d'applications" ont des optimisations et des limites de taille en ce qui concerne la taille d'une chose utilisée comme argument ou valeur de retour. registre -bit (2x flotteurs de 32 bits) ce qui le rend plus lourd que de retourner un int. Mais le compilateur peut aussi faire d'autres trucs pour copier et écrire des structures plus grandes, par exemple CGRect.)
Et en accord avec Apple convention de nommage, nous savons que nous n'avons pas besoin de le libérer parce qu'il n'a pas le mot "Créer" ou "Copier" dans le nom de la fonction (suivant la règle Créer). Apple utilise généralement Make dans les situations où la chose renvoyée est une structure, mais le plus important est d'apprendre la règle de création et la règle de gestion de la mémoire Cocoa équivalente (new, alloc, copy). –