Propriétés de la Classe et de Ses sous-classes
Est-il possible de définir les propriétés qui ne sont disponibles que pour la classe, elles sont définies, et que les sous-classes de la classe?
Dit d'une autre façon, il est un moyen de définir des propriétés protégées?
Vous devez vous connecter pour publier un commentaire.
Techniquement, pas de. Les propriétés sont vraiment juste des méthodes, et toutes les méthodes sont publiques. La façon dont nous "protéger" les méthodes en Objective-C est de ne pas laisser d'autres personnes savent à leur sujet.
Pratiquement, oui. Vous pouvez définir les propriétés dans une extension de classe, et encore
@synthesize
dans votre main la mise en œuvre de bloc.C'est possible en utilisant une extension de classe (pas de catégorie) - vous d'inclure dans les fichiers de mise en œuvre de la classe de base et des sous-classes.
Une extension de classe est défini semblable à une catégorie, mais sans le nom de la catégorie:
Dans une extension de classe, vous pouvez déclarer des propriétés, qui sera capable de synthétiser de la sauvegarde de ivars (XCode > 4.4 synthèse automatique de la ivars travaille aussi ici).
Dans la classe d'extension, vous pouvez remplacer/affiner les propriétés (changement readwrite readonly etc.), et ajouter des propriétés et des méthodes qui seront "visibles" à la mise en œuvre des fichiers (mais notez que les propriétés et les méthodes ne sont pas vraiment privé et peut encore être appelé par sélecteur).
D'autres ont proposé d'utiliser un autre fichier d'en-tête MyClass_protected.h pour cela, mais cela peut également être fait dans le principal fichier d'en-tête à l'aide de
#ifdef
comme ceci:Exemple:
BaseClass.h
BaseClass.m
ChildClass.h
ChildClass.m
Lorsque vous appelez
#import
, il copie-colle le .h de fichier là où vous l'importer.Si vous avez un
#ifdef
, il y aura seulement le code à l'intérieur si le#define
avec le nom d'un jeu.Dans votre .h de fichier, vous ne définissez pas les définir toutes les classes de l'importation .h l'habitude de voir les protégés de la classe de l'extension.
Dans la classe de base et la sous-classe .m fichier, vous utilisez
#define
avant d'utiliser#import
de sorte que le compilateur d'inclure la classe protégée extension.Vous pouvez utiliser ces syntaxe dans la sous-classe de mise en œuvre.