2016-05-05 21 views
2

Ich schreibe eine App in Swift, die ihre Daten durch die Kerndaten von Apple speichert. In meinem Code werden alle Integer nur als "Int" deklariert, weil das flexibler ist und der Compiler diese Ints an das Gerät anpasst, auf dem der Code läuft.Generischen Int in Code verwenden - 32 oder 64 Bit Int in Core Data iOS verwenden?

Wenn ich jedoch diese "Int" s mit Core-Daten speichern möchte, muss ich entweder 32 oder 64-Bit-Ganzzahlen wählen. Ich würde wollen, dass meine App mit iPhone 5-6s kompatibel ist, wenn möglich und bin daher zögerlich, um für die 32bit (ich lese Apple bewegte sich auf 32bit in 6s wegen der besseren Leistung).

Problemumgehungen, um diesen Teil des Codes flexibel zu halten? Wenn ich 32bit wähle, was passiert, wenn der Code auf einem 64-Bit-Gerät ausgeführt wird?

Vielen Dank im Voraus.

+0

wahrscheinlich die Lösung ist behalte zwei Datenmodelle und wähle das richtige in Runtime – heximal

+0

@heximal Oder vielleicht nur Int32, da er höchstwahrscheinlich keine Zahlen speichern muss, die 2.147.483.647 überschreiten. Und selbst wenn, sollte er Int64 anstelle von Int an erster Stelle verwenden, um sicherzustellen, dass seine App auf 32-Bit-Geräten funktioniert. Und dann speichern Sie es offenbar als Int64 in CoreData. – 123FLO321

+0

klingt vernünftig – heximal

Antwort

2

Der Standard Int:

  • auf 32 Bit Devices = Int32
  • auf 64 Bit Devices = Int64 (und ja, es ist ein Int64 Getestet es gerade auf dem iPhone6S)

Aber Int32 und Int64 funktionieren auf einem 32-Bit-Gerät. (Aber Int64 dauert länger auf 32 Bit-Geräte zu berechnen)

Ich empfehle Ihnen, Int32 verwenden, wenn Ihre Nummer kleiner oder gleich 2.147.483.647
Formel ±: (2^(Bit - 1) - 1) Or sogar Int16, wenn kleine oder gleich 32.767
bis ± (Eigentlich der negativer Wert 1 größer ist als der Wert positiv: Reichweite der Int32 -2.147.483.648 ... 2.147.483.647)

wenn Sie Int32 verwenden in coreData nur sicherstellen, dass Sie diese Zahl nicht überschreiten und den Int als? Int32 beim Speichern (? Wie denn es kann theoretisch eine höhere Zahl sein)
Beim Laden Int32 immer Int erfolgreich ist (Einsatz: als Int!)

Wenn Sie Int64 in Coredata verwenden nur werfen die Int als ! Int64 beim Speichern (Dies ist immer erfolgreich auch auf 32-Bit-Geräten, aber möglicherweise ein etwas langsamer aber wenn Sie nicht speichern/laden zu oft Sie sollten keine Probleme haben)
Aber seien Sie vorsichtig, wenn Laden, kann die Darstellungsform Int64 zu Int scheitern, weil wieder Int64 könnte theoretisch eine größere Anzahl gespeichert haben, die ein Int auf 32-Bit-Geräten speichern können (verwenden Sie als? Int, um mögliche Abstürze zu vermeiden)