C'est peut-être évident, mais je ne sais pas comment déclarer les propriétés d'une classe en Objective-C.
J'ai besoin de mettre en cache par classe un dictionnaire et je me demande comment le mettre dans la classe.
objective-c
cocoa
oop
mamcx
la source
la source
.
syntaxe -accessor n'est pas liée aux propriétés dans Objective-C, c'est juste un raccourci compilé pour toute méthode qui renvoie quelque chose sans prendre d'arguments. Dans ce cas, je le préférerais - je préfère personnellement la.
syntaxe pour toute utilisation où le code client a l'intention d'obtenir quelque chose, de ne pas effectuer d'action (même si le code d'implémentation peut créer quelque chose une fois ou effectuer des actions avec effets secondaires) . La.
syntaxe d' utilisation intensive se traduit également par un code plus lisible: la présence de[…]
s signifie que quelque chose d'important est en cours lorsque les récupérations utilisent la.
syntaxe à la place.J'utilise cette solution:
Et je l'ai trouvé extrêmement utile en remplacement du motif Singleton.
Pour l'utiliser, accédez simplement à vos données avec la notation par points:
la source
self
veut dire à l'intérieur d'une méthode de classe?self
est l'objet qui a reçu le message . Et puisque les classes sont aussi des objets , dans ce cas, celaself
signifieModel
@synchronized
?Comme vu dans WWDC 2016 / XCode 8 ( ce qui est nouveau dans la session LLVM @ 5: 05). Les propriétés de classe peuvent être déclarées comme suit
Notez que les propriétés de classe ne sont jamais synthétisées
la source
static
variable ( ) doit toujours être déclarée et utilisée, et les méthodes implémentées explicitement, telles qu'elles étaient auparavant. La syntaxe des points fonctionnait déjà auparavant également. Dans l'ensemble, cela semble être une affaire plus importante qu'elle ne l'est vraiment.Si vous recherchez l'équivalent de niveau classe
@property
, alors la réponse est "il n'y a rien de tel". Mais rappelez-vous,@property
n'est que du sucre syntaxique, de toute façon; il crée simplement des méthodes d'objet correctement nommées.Vous voulez créer des méthodes de classe qui accèdent à des variables statiques qui, comme d'autres l'ont dit, n'ont qu'une syntaxe légèrement différente.
la source
UIDevice.currentDevice.identifierForVendor
travaille pour moi.Voici un moyen sûr de le faire:
Ces modifications garantissent que fooDict n'est créé qu'une seule fois.
À partir de la documentation Apple : "dispatch_once - Exécute un objet bloc une seule fois pour la durée de vie d'une application."
la source
Initializer element is not a compile-time constant
.Depuis Xcode 8, Objective-C prend désormais en charge les propriétés de classe:
Comme les propriétés de classe ne sont jamais synthétisées, vous devez écrire votre propre implémentation.
Vous accédez aux propriétés de la classe à l'aide de la syntaxe à points normale sur le nom de la classe:
la source
Les propriétés ont des valeurs uniquement dans les objets, pas dans les classes.
Si vous devez stocker quelque chose pour tous les objets d'une classe, vous devez utiliser une variable globale. Vous pouvez le cacher en le déclarant
static
dans le fichier d'implémentation.Vous pouvez également envisager d'utiliser des relations spécifiques entre vos objets: vous attribuez un rôle de maître à un objet spécifique de votre classe et liez d'autres objets à ce maître. Le maître conservera le dictionnaire comme une simple propriété. Je pense à un arbre comme celui utilisé pour la hiérarchie des vues dans les applications Cocoa.
Une autre option consiste à créer un objet d'une classe dédiée qui est composé à la fois de votre dictionnaire «classe» et d'un ensemble de tous les objets liés à ce dictionnaire. C'est quelque chose comme
NSAutoreleasePool
dans Cocoa.la source
À partir de Xcode 8, vous pouvez utiliser l' attribut de propriété de classe comme l'a répondu Berbie.
Cependant, dans l'implémentation, vous devez définir à la fois le getter de classe et le setter pour la propriété de classe à l'aide d'une variable statique au lieu d'un iVar.
Sample.h
Sample.m
la source
Si vous avez de nombreuses propriétés de niveau classe, un modèle singleton peut être en ordre. Quelque chose comme ça:
Et
Accédez maintenant à vos propriétés au niveau de la classe comme ceci:
la source
dispatch_once
ici.[Essayez cette solution, c'est simple] Vous pouvez créer une variable statique dans une classe Swift puis l'appeler à partir de n'importe quelle classe Objective-C.
la source