2010-01-20 32 views
8

Apple có changed how they calculate KB, MB, and GB in Max OS X 10.6. Thay vì sử dụng 1024, họ sử dụng 1000.Có một hằng số cho GB lớn trong Cocoa không?

Câu hỏi của tôi là cách giải quyết vấn đề này trong mã của tôi? Tôi đang cố gắng để có được số lượng không gian miễn phí, vì vậy tôi nhận được số lượng byte thông qua NSFileManager. Khi tôi đi để hiển thị cho người dùng, tôi cần phải biến nó thành GBs khác nhau tùy thuộc vào việc họ đang ở trên 10.5 hay 10.6.

Có hằng số tích hợp cho kích thước GB không? (Hoặc bất cứ điều gì nó là bạn sẽ gọi số 1024?) Có vẻ như một chút ngớ ngẩn để xác định của riêng tôi.

## 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

Bạn không * cần * để hiển thị không gian trống trong Gibibytes trên hệ thống Leopard - không có gì ngăn bạn sử dụng các đơn vị Gigabyte (= 10^9 byte) trên tất cả các nền tảng. Tôi có thể đánh giá cao mong muốn phù hợp với hệ thống máy chủ, nhưng có vẻ như không cần thiết với tôi ở đây. –

+0

Tôi đang hiển thị cho người dùng khoảng trống cần thiết để tôi có thể làm điều gì đó, vì vậy sẽ tốt hơn nếu nó phù hợp với hệ thống của họ. – zekel

+0

Ah, OK. Đó là một lý do khá tốt để làm điều đó. –

Trả lời

5

Kể từ OS X 10.8/iOS 6.0, lớp mới NSByteCountFormatter thực hiện chính xác những gì bạn muốn:

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

Decimal/Binary là 1000 và 1024. File/Memory là bí danh cho bất cứ một hệ điều hành sử dụng cho biện pháp đó.

Các vấn đề liên quan