Je me demandais si l'objectif C ne vérifie pas si un pointeur sur un objet est nul avant d'appeler la fonction.Passer un objet nul à une fonction
Par exemple, que j'ai un
myObject* ptr;
et initialiser
ptr = nil;
et appelez
[self myFunction:ptr];
où maFonction est ma propre fonction et ne pas vérifier pour voir si la l'objet est nul. J'ai entendu quelque part que l'objectif C n'appellera pas la fonction si elle est nulle? Est-ce vrai et mon code serait-il en sécurité?
La raison pour laquelle je pose cette question est parce que j'implémente une application universelle, et que j'ai une instance UIView qui ne fonctionnera que pour l'ipad. Mais, je fais beaucoup d'appels de fonction pour cette vue, et au lieu de faire des vérifications de condition pour voir si c'est un ipad avant d'appeler la fonction, ce serait génial si je pouvais définir la vue comme nulle si c'est un iphone.
De même, si le constructeur d'interface a alloué l'objet et que j'ai défini le pointeur sur zéro, y aura-t-il une fuite de mémoire ou le constructeur saura-t-il libérer l'objet?
Merci
Oui, et pour être plus clair à l'affiche originale: votre compréhension est à l'envers. Si ** l'objet ** est "nul", rien ne se passe. Si l'argument ** est nul, la méthode est toujours appelée, et soit ne gère pas comme prévu, soit gonfle. Il n'y a pas de magie autour des arguments. –
Merci pour les réponses, les gars. Oui, ça a répondu à ma question. Désolé, je viens de la programmation procédurale et n'ai pas eu beaucoup d'expérience avec la POO, donc je suis habitué à passer des arguments et à oublier le concept de récepteur. Oui, la majeure partie de mon code est au format [myObject myFunction], donc je devrais pouvoir définir myObject comme nul. Je suis juste inquiet si le système passe mon objet, maintenant. – user396004
Cela peut être utile si vous réalisez qu'en plus des arguments que vous avez passés explicitement, self et _cmd sont présents dans chaque méthode en tant qu'arguments implicites. 'self' (le destinataire) est juste un argument implicite lorsque votre méthode est invoquée. – NSResponder