web-dev-qa-db-fra.com

Objectif-C: init vs initialize

Dans Objective-C, quelle est la différence entre la méthode init (c'est-à-dire l'initialiseur désigné pour une classe) et la méthode initialize? Quel code d'initialisation doit être mis dans chacun?

72
jrdioko

-init est une méthode d'instance, utilisée pour initialiser un objet particulier. +initialize est une méthode de classe, exécutée avant la création de toute instance de la classe et avant l'exécution d'autres méthodes de classe. +initialize n'est pas quelque chose que vous utilisez la plupart du temps, mais c'est pratique pour configurer toutes les variables statiques que la classe dans son ensemble pourrait utiliser, ou pour garantir que certaines conditions sont remplies avant la création d'instances.

Le code qui appartient à un -init est décrite en détail dans la section Implémentation d'un initialiseur de Le langage de programmation Objective-C . Il y a aussi une discussion sur l'initialisation des classes (c'est-à-dire +initialize) et pourquoi vous pourriez avoir besoin de le faire dans le même document, dans la section Class Objects . Le code qui entre dans +initialize sera généralement fortement lié à la fonctionnalité spéciale de la classe qui vous oblige à l'initialiser en premier lieu. Une chose importante à garder à l'esprit dans +initialize (et dans toute méthode de classe) est que self dans une méthode de classe fait référence à la classe elle-même, pas à une instance de la classe.

125
Caleb

Pour tracer un parallèle pour les développeurs Java développeurs, init est comme un constructeur, tandis que initialize est comme un bloc statique sur une classe.

17
Eki