N'Objective-C d'interdire l'utilisation de leurs structures?
Je suis nouveau sur Objective-C
J'ai essayé à l'aide d'un simple struct
et a obtenu
arc forbids objective-c objects in struct
La recherche jusqu'à l'ARC, il semble que ce est la spécification qui définit l'Objectif C syntaxt - est-ce exact?
Deuxièmement, comment puis-je aller sur l'aide de struct
si il n'est pas permis?
Merci!
Edit: un peu de code qu'un échantillon
@implementation Cities {
//The goal is to have a struct that holds information about a city,
//like when a person started and ended living there.
//I was trying to make this struct an instance variable of the Cities
//class
//XCode doesn't like the below struct definition
struct City
{
NSString *name;
int *_startYear;
int *_endYear;
};
}
Montrer le code, pourquoi voulez-vous une struct?
Aucune raison particulière, je suis en train de jouer avec des exemples de code et vous demandez-vous pourquoi j'obtiens l'erreur ci-dessus lors de l'utilisation d'un
Je ne me souviens plus de la raison exacte, vous pouvez utiliser des structures il suffit de ne pas mettre des pointeurs vers des instances de classe.
L'ARC document est pas l'Objectif-C les spécifications. malheureusement, Il n'est pas d'une telle spécification.
Étroitement liés: la Fixation d'ARC d'erreur lors de l'utilisation de ObjC objet struct
Aucune raison particulière, je suis en train de jouer avec des exemples de code et vous demandez-vous pourquoi j'obtiens l'erreur ci-dessus lors de l'utilisation d'un
struct
. Si il n'est pas conseillé d'utiliser, c'est très bien, je ne vais pas l'utiliser à long terme. Je suis plus intéressé par la pourquoi c'est jeter l'erreur. Merci!Je ne me souviens plus de la raison exacte, vous pouvez utiliser des structures il suffit de ne pas mettre des pointeurs vers des instances de classe.
L'ARC document est pas l'Objectif-C les spécifications. malheureusement, Il n'est pas d'une telle spécification.
Étroitement liés: la Fixation d'ARC d'erreur lors de l'utilisation de ObjC objet struct
OriginalL'auteur user2490003 | 2015-02-12
Vous devez vous connecter pour publier un commentaire.
Les structures sont a C de construire. Le compilateur est vous dire, en très unabiguous termes, que vous ne pouvez pas avoir Objective-C objets à l'intérieur d'une structure, non pas que les structures sont illégales.
Vous pouvez utiliser les C structs tout ce que vous voulez.
Votre exemple, essaye de mettre des références à un Objectif-objet C,
NSString
, dans unstruct
, ce qui est incompatible avec l'ARC.Les structures sont généralement utilisés pour de simples structures de données. Les exemples que vous êtes susceptible de rencontrer dans code Objective-C sont
CGPoint
etCGRect
.CGPoint
ressemble à quelque chose comme ceciUn
CGFloat
est, je pense, juste undouble
, et l'idée de représenter un point dans l'espace 2D. Les structures peuvent inclure des liens vers d'autres structures, C-tableaux standard et les types de données C commeint
,char
,float
... Et Objective-C classes peuvent contenir des structures, mais l'inverse ne fonctionne pas.Les structures peuvent aussi être assez compliqué, mais c'est un sujet très vaste qui est le mieux documenté à l'aide de Google.
Qui a du sens! Une chose de plus - et désolé d'être dense ici - je obtenir cet Objectif C objets ne peut pas être dans une struct, et donc mon NSString définition n'est pas valide. Mais votre struct contient CGFloat - n'est-ce pas un Objectif C de l'objet?
CGFloat est juste un typedef pour float_32 je pense, pas sûr
Cette réponse est obsolète. Comme de la WWDC 'de 18 ans, vous êtes maintenant autorisé à spécifier ARC pointeurs d'objet en C des structures.
OriginalL'auteur dandan78
Vous pouvez utiliser
struct
dans Objective-C++ avec ARC en tout cas.Si vous le compiler en tant que Objective-C, vous avez échoué, comme vous l'avez dit.
Parce que C struct ne pas avoir la capacité de gestion pour la variable de durée de vie.
Mais en C++, struct n'ont de fonction destructeur. Donc, C++ struct est compatible avec l'ARC.
OriginalL'auteur Kazuki Sakamoto
Si vous souhaitez utiliser struct en C Objectif ( avec ARC) "__dangereuse_consignes" attribut.
__unsafe_unretained
variables qui ont été libérés va provoquer un plantageOriginalL'auteur Soumen