[FIXED] Verbietet Objective-C die Verwendung von Strukturen?

Ausgabe

Ich bin neu bei Objective C

Ich versuchte es mit einem einfachen structund 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, structwenn 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 CGPointund CGRect.

CGPointsieht ungefähr so ​​aus

struct CGPoint 
{ 
   CGFloat x; 
   CGFloat y; 
};

A CGFloatist 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)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like