web-dev-qa-db-fra.com

Le type d'interface ne peut pas être alloué statiquement?

J'ai essayé de mettre cela dans le fichier d'en-tête de mon objet de vue:

@property (nonatomic) UIColor color;

pour stocker la couleur avec laquelle les lignes doivent être dessinées dans cette vue.

Xcode me donne une erreur sur cette ligne:

Le type d'interface ne peut pas être alloué statiquement

Qu'est-ce que cela signifie et que dois-je faire?

ÉDITER:

J'ai ajouté un *, et au point de synthèse, il a dit:

ARC interdit de synthétiser une propriété d'un objet Objective C avec une propriété ou un attribut de stockage non spécifié?

39
William Sham

Votre variable est pour un type d'objet, et en tant que telle doit être déclarée comme un pointeur:

@property (nonatomic) UIColor * color;    // Note the asterisk

"Alloué statiquement" dans ce cas signifierait que la mémoire de cet objet a été allouée au moment de la compilation. Cependant, tous les objets dans Obj-C sont alloués au moment de l'exécution et accessibles via des pointeurs.

"Type d'interface" est une sorte de terme trop technique qui a du sens pour le compilateur, et qui n'est pas terriblement important ici. Cela signifie que UIColor représente l'interface à travers laquelle le compilateur attend de vous que vous interagissiez avec la variable color. Le type réel de l'objet pointé peut être différent (comme avec un cluster de classes comme NSString).

75
Josh Caswell

Le problème est que vous ne pouvez accéder aux objets Objective-C que par référence via des pointeurs, comme ceci:

UIColor *color;

vous ne pouvez pas avoir un objet "nu", comme ceci:

UIColor color;

La solution consiste donc à insérer l'astérisque dans votre code (ce que vous vouliez probablement faire, et le bogue n'est qu'une faute de frappe).

6
user23743

Vous devez déclarer un pointeur UIColor comme ceci et ajouter retenir/fort selon que vous utilisez ARC ou MRR:

@property (nonatomic, strong) UIColor *color;
5
Reed Olsen