Objective C-Klasse oder Struktur?

7

Ich habe eine Klasse Song mit den Eigenschaften Titel, Key, Artist usw. Es gibt keine Methoden. Ich durchlaufe eine Datenbank mit Songinformationen und erstelle für jedes ein Song-Objekt, befülle die Eigenschaften und speicher die Song-Objekte dann in einem NSArray.

Dann dachte ich, warum sollte man nicht einfach einen struct-Song mit all diesen Eigenschaften anstelle eines Klassen-Songs haben? Dadurch würden die Klassendateien, die #import-Song-Zeile in der .m-Datei der Verwendungsklasse und die Notwendigkeit der Zuweisung, init, release, gelöscht.

Auf der anderen Seite müsste ich die Strukturdefinition in jede Klasse schreiben, die sie brauchen könnte. (Es sei denn, es gibt einen global zugänglichen Ort - gibt es das?) Kann eine Struktur auch in einem NSArray gespeichert werden?

    
Scott Pendleton 02.04.2010, 14:39
quelle

3 Antworten

18

Ich würde es mit einer Klasse machen. Eine Struktur kann nicht in einem NSArray (oder in einer der anderen Container-Klassen) gespeichert werden, es sei denn, Sie wickeln sie in einen NSValue ein, was zwar erledigt werden kann, aber ein wenig fummelig ist.

Außerdem müssen Sie, wie Sie bereits gesagt haben, die Struktur irgendwo definieren. Der normale Weg wäre, es in einer Header-Datei (.h) genau wie für eine Klasse zu definieren. Es gibt also keinen "Gewinn" von einer Struktur.

    
Nick Moore 02.04.2010, 14:43
quelle
6

Sie können keine Strukturen in einem NSArray speichern (sehen Sie sich die Signaturen ihrer Methoden an - sie nehmen alle Objekte auf und geben sie zurück). Aber abgesehen davon, wie ich in der Antwort auf eine andere neue Frage sagte , Objekte in Strukturen zu platzieren, ist immer eine schlechte Idee. Objekte müssen beibehalten und freigegeben werden, und den Strukturen ist kein Code zugeordnet, um sicherzustellen, dass dies zu den richtigen Zeiten geschieht. Dies macht mehr Sinn als Modellobjekt.

    
Chuck 02.04.2010 14:50
quelle
2

Es könnte in beide Richtungen gehen, aber warum trennen Sie Ihre Bedenken nicht und behalten sie in ihrer eigenen Klassendatei? Außerdem entspricht dies eher dem Grundsatz der einheitlichen Verantwortung von SOLID. Warum geben Sie Ihrer Hauptklassendatei einen anderen Grund, sich zu ändern? Brechen Sie es aus.

    
Brian David Berman 02.04.2010 14:42
quelle

Tags und Links