Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a constant for how big a GB is in Cocoa?

Apple has changed how they calculate KB, MB, and GB in Max OS X 10.6. Instead of using 1024, they use 1000.

My question is how to deal with this in my code? I'm trying to get the amount of space free, so I get the number of bytes via NSFileManager. When I go to display that to the user, I need to turn that into GBs differently depending on whether they're on 10.5 or 10.6.

Is there a built-in constant for GB size? (Or whatever it is you would call the 1024 number? ) It seemed a little silly to define my own.

## 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;
like image 618
zekel Avatar asked Jan 20 '10 21:01

zekel


1 Answers

Since OS X 10.8 / iOS 6.0, the new NSByteCountFormatter class does exactly what you want:

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

Decimal/Binary are 1000 and 1024. File/Memory are aliases for whichever one the OS uses for that measure.

like image 88
John Avatar answered Sep 17 '22 23:09

John