2010-01-20 1 views
8

Apple ha changed how they calculate KB, MB, and GB in Max OS X 10.6. Invece di usare 1024, usano 1000.C'è una costante per quanto è grande un GB in Cocoa?

La mia domanda è come affrontare questo nel mio codice? Sto cercando di ottenere la quantità di spazio libero, quindi ottengo il numero di byte tramite NSFileManager. Quando vado a visualizzarlo all'utente, devo trasformarlo in GB in modo diverso a seconda che si trovino su 10.5 o 10.6.

C'è una costante integrata per la dimensione GB? (O qualunque cosa si chiami il numero 1024?) Mi è sembrato un po 'sciocco definire il mio.

## I'm currently doing something like this. 
if (running10_6) { 
    double gbConst = 1000 * 1000 * 1000; 
} else { 
    double gbConst = 1024 * 1024 * 1024; 
} 

NSDictionary *attr = [NSFM attributesOfFileSystemForPath:@"/" error:&error]; 
double bytes = [[attr objectForKey:NSFileSystemFreeSize] doubleValue]; 
double freeGB = bytes/gbConst; 
+0

Non * è necessario * per visualizzare lo spazio libero in Gibibytes su un sistema Leopard - non c'è nulla che impedisca di utilizzare le unità Gigabyte (= 10^9 byte) su tutte le piattaforme. Posso apprezzare il desiderio di abbinare il sistema host, ma mi sembra inutile qui. –

+0

Sto mostrando all'utente quanto spazio hanno bisogno di liberare per poter fare qualcosa, quindi sarebbe bello averlo abbinato al loro sistema. – zekel

+0

Ah, OK. Questa è una buona ragione per volerlo fare. –

risposta

5

Dal OS X 10.8/iOS 6.0, la nuova classe NSByteCountFormatter fa esattamente ciò che si vuole:

enum { 
    NSByteCountFormatterCountStyleFile = 0, 
    NSByteCountFormatterCountStyleMemory = 1, 
    NSByteCountFormatterCountStyleDecimal = 2, 
    NSByteCountFormatterCountStyleBinary = 3 
}; 

decimale/binario sono 1000 e 1024. File/memoria sono alias per qualunque sia quello del sistema operativo usi per quella misura.