Tut Objective-C verbieten die Verwendung von structs?
Ich bin neu in Objective C
Versuchte ich mit einem einfachen struct
und bekam
arc forbids objective-c objects in struct
Suchen ARC, es sieht aus wie dieses die Spezifikation, die definiert, Objective C syntaxt - ist das richtig?
Zweitens, wie gehe ich mit struct
wenn es nicht erlaubt ist?
Danke!
Edit: code als Beispiel
@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;
};
}
Zeigen Sie den code, warum willst du eine struct?
Keine besonderen Grund, gerade jetzt, ich bin nur Herumspielen mit code-Beispielen und Fragen, warum bekomme ich die obige Fehlermeldung, wenn mit einem
Ich erinnere mich nicht den genauen Grund, können Sie Strukturen einfach nicht setzen Zeiger auf Klasseninstanzen in Ihnen.
Die ARC-Dokument ist nicht die Objective-C-Spezifikation. Es gibt leider keine solche Spezifikation.
Verwandte Themen: Befestigung ARC Fehler bei der Verwendung von ObjC Objekt in struct
Keine besonderen Grund, gerade jetzt, ich bin nur Herumspielen mit code-Beispielen und Fragen, warum bekomme ich die obige Fehlermeldung, wenn mit einem
struct
. Wenn es nicht ratsam, zu verwenden, das ist in Ordnung, ich werde es nicht verwenden, langfristigen. Ich bin mehr daran interessiert, in warum es wirft den Fehler zu finden. Danke!Ich erinnere mich nicht den genauen Grund, können Sie Strukturen einfach nicht setzen Zeiger auf Klasseninstanzen in Ihnen.
Die ARC-Dokument ist nicht die Objective-C-Spezifikation. Es gibt leider keine solche Spezifikation.
Verwandte Themen: Befestigung ARC Fehler bei der Verwendung von ObjC Objekt in struct
InformationsquelleAutor user2490003 | 2015-02-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Strukturen sind ein C-Konstrukt. Der compiler sagt Ihnen, in sehr unabiguous-Begriffe, die Sie nicht haben können Objective-C-Objekte, die sich innerhalb einer struct, nicht, die Strukturen sind illegal.
Können Sie reguläre C-structs alles, was Sie wollen.
Deinem Beispiel versucht zu setzen, Verweise auf ein Objective-C-Objekt,
NSString
, in einestruct
, die ist inkompatibel mit der ARC.Strukturen werden normalerweise verwendet, für einfache Daten-Strukturen. Beispiele, die Sie wahrscheinlich stoßen in Objective-C-code sind
CGPoint
undCGRect
.CGPoint
sieht so etwasEinen
CGFloat
ist, glaube ich, nur eindouble
, und die Idee, die es repräsentiert einen Punkt im 2D-Raum. Structs können, beinhalten Verweise auf andere Strukturen, C-arrays und standard-C-Datentypen wieint
,char
,float
... Und Objective-C-Klassen können Strukturen enthalten, aber der Rückwärtsgang funktioniert nicht.Strukturen können auch ziemlich kompliziert an, aber das ist ein sehr breites Thema, das ist am besten recherchiert mit Google.
Das macht Sinn! Eine weitere Sache - und sorry für die dichter hier - ich verstehe, dass Objective-C-Objekte können nicht in eine Struktur, und so ist meine NSString definition ist ungültig. Aber dein struct enthält CGFloat - ist das nicht eine Objective-C-Objekt?
CGFloat ist nur ein typedef für float_32 denke ich, nicht sicher
Diese Antwort ist veraltet. Wie von der WWDC '18, Sie sind jetzt erlaubt, um anzugeben, ARC-Objekt-Zeiger in C structs.
InformationsquelleAutor dandan78
Können Sie
struct
im Objective-C++ mit ARC auf jeden Fall.Wenn Sie Sie kompilieren wie Objective-C, Sie nicht wie Sie sagte.
Weil C struct hat nicht die Fähigkeit des Managements für die variable Lebensdauer.
Aber in C++ struct hat Destruktor-Funktion. Also C++ struct ist kompatibel mit ARC.
InformationsquelleAutor Kazuki Sakamoto
Wenn Sie verwenden möchten struct in Objective-C ( mit ARC) verwenden "__unsafe_unretained" - Attribut.
__unsafe_unretained
Variablen, die freigegeben wurden, wird einen Absturz verursachenInformationsquelleAutor Soumen