Ausgabe
Ich bin neu bei Objective C
Ich versuchte es mit einem einfachen struct
und bekam
arc forbids objective-c objects in struct
Beim Nachschlagen von ARC sieht es so aus, als ob dies die Spezifikation ist, die die Objective C-Syntaxt definiert – ist das richtig?
Zweitens, wie gehe ich vor, struct
wenn es nicht erlaubt ist?
Vielen Dank!
Bearbeiten: Etwas 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;
};
}
Lösung
arc verbietet Objective-c-Objekte in struct
Strukturen sind ein C-Konstrukt. Der Compiler sagt Ihnen in sehr eindeutigen Worten, dass Sie keine Objective-C-Objekte in einer Struktur haben können, nicht, dass Strukturen illegal sind.
Sie können normale C-Strukturen verwenden, so viel Sie wollen.
Ihr Beispiel versucht, Verweise auf ein Objective-C-Objekt, NSString
, in ein struct
, das mit ARC nicht kompatibel ist, einzufügen.
Strukturen werden typischerweise für einfache Datenstrukturen verwendet. Beispiele, auf die Sie wahrscheinlich in Objective-C-Code stoßen werden, sind CGPoint
und CGRect
.
CGPoint
sieht ungefähr so aus
struct CGPoint
{
CGFloat x;
CGFloat y;
};
A CGFloat
ist meiner Meinung nach nur ein double
, und die Idee ist, einen Punkt im 2D-Raum darzustellen. Strukturen können Zeiger auf andere Strukturen, C-Arrays und Standard-C-Datentypen wie int
, char
, float
… enthalten, und Objective-C-Klassen können Strukturen enthalten, aber das Gegenteil funktioniert nicht.
Strukturen können auch ziemlich kompliziert werden, aber das ist ein sehr weites Thema, das am besten mit Google recherchiert wird.
Beantwortet von – dandan78
Antwort geprüft von – Clifford M. (FixError Volunteer)