Ne soyez pas un ennemi. :-)
Soit dit en passant, je suppose que vous vouliez dire:
(Edit: supprimés moulages inutiles)
MyClass oClass = [[MyClass alloc] initWithLength:5 andText:@"Hello"];
La raison de plusieurs méthodes d'initialisation ... est de faire il est plus pratique pour les développeurs de créer des instances correctement initialisées. Ainsi, par exemple, si vous trouvez que les développeurs ont souvent besoin de créer des instances de MyClass avec une longueur et du texte, vous leur facilitez la vie en fournissant une API qui leur permet de le faire en une seule étape. Et si vous trouvez que les développeurs ont souvent besoin de créer des instances de MyClass avec juste une chaîne de texte, vous pouvez également fournir une méthode -initWithText:
. Et si les instances créées de cette manière sont fréquemment utilisées comme des objets temporaires (non stockées dans des variables d'instance ou des variables statiques), vous pouvez également ajouter une méthode de commodité de classe comme +myClassWithText:
qui retourne une instance auto-libérée de MyClass initialisée avec le chaîne de texte fournie. En ce qui concerne le mieux: il est toujours préférable d'initialiser complètement un objet lorsque cela est possible, donc si l'objet nécessite que les deux valeurs soient correctement initialisées, utilisez la méthode qui vous permet de fournir les deux arguments. Et si vous n'avez pas besoin de stocker une référence à l'instance que vous créez, utilisez la méthode de commodité de classe pour que votre code n'ait pas à gérer la gestion de la mémoire.
voulez-vous dire [MyClass myClassWithLength: ...? – Ross
Il n'y a jamais une méthode de classe qui sera appelée 'initWith ...' - les méthodes init sont toujours des méthodes d'instance. Ce sera toujours '[[MyClass alloc] initWith ...]'. Les cours offrent parfois des commodités aux constructeurs comme le demande Ross. Juste pour être clair. – Chuck