2010-07-07 13 views
5

Wann sollte ich Primitive in Objective-C anstelle von NSValue Unterklassen verwenden? Dieser Code ist sicherlich sauberer (denke ich) als die Verwendung von NSNummer:Wann Primitive in Objective-C zu verwenden?

aber gibt es irgendwelche Nachteile? Ist es auch richtig, dass ich release oder irgendetwas mit Primitiven nicht anrufen muss? Wird die Erinnerung freigegeben, wenn sie außer Reichweite geraten?

Antwort

4

Die Grundtypen sind bevorzugt. Verwenden Sie die Objekte NSNumber und NSValue nur, wenn Sie sie als Objekt übergeben müssen.

Der einzige Nachteil der primitiven Typen ist, dass Sie sie nicht als Objekt übergeben können.

Primitive Typen können auf dem Stack (lokale Variablen) oder dem Heap (w/malloc) zugewiesen werden. Objekte können nur auf dem Heap zugewiesen werden, was teurer ist als die Stapelzuweisung.

+0

Warum kümmert es mich, dass ich sie nicht als Objekte übergeben kann? Entschuldigung, wenn das eine dumme Frage ist, die aus einem Autobox-Universum kommt. –

+1

Wenn Sie eine API aufrufen möchten, die ein NSNumber-Objekt als Parameter akzeptiert oder sie in einem NSArray oder NSDictionary speichert, muss es ein Objekt sein. – progrmr

+1

Ich würde sagen, dass grundlegende * Skalar * -Typen bevorzugt sind. Es erfordert ziemlich spezielle Umstände, dass ein C-Array oder C-String einem NSArray oder NSString vorzuziehen ist. – Chuck

0

Was ist bequemer für Sie in Ihrem eigenen Code zu verwenden, aber normalerweise würden Sie NSwhatever verwenden, wenn es an eine API übergeben werden muss.

2

Ein Hauptnachteil bei der Verwendung primitiver Typen besteht darin, dass Sie sie nicht in einem NSArray speichern können.

+2

Oder irgendein Cocoa Sammlung Objekt – JeremyP

+0

in der Tat, guten Ruf – blu