2013-03-18 18 views
5

Jak obliczyć całkowity rozmiar obiektu NSDictionary? Mam 3000 obiektów StudentClass w NSDictionary z różnymi kluczami. Chcę obliczyć całkowity rozmiar słownika w KB. Użyłem malloc_size(), ale zawsze zwracam 24 (NSDictionary zawierają 1 obiekt lub 3000 obiektów) sizeof() również zwraca zawsze to samo.Jak obliczyć całkowity rozmiar obiektu NSDictionary?

+1

Oto proste pytanie: http://stackoverflow.com/questions/8223560/how-to-find-the-size-of-any-object-in-ios – Ossir

Odpowiedz

4

Możesz spróbować uzyskać wszystkie klucze Słownika w tablicy, a następnie powtórzyć tablicę, aby znaleźć rozmiar, może to dać całkowity rozmiar kluczy w słowniku.

NSArray *keysArray = [yourDictionary allValues]; 
id obj = nil; 
int totalSize = 0; 

for(obj in keysArray) 
{ 
    totalSize += malloc_size(obj); 
} 
3

Najlepszym sposobem na obliczenie rozmiaru dużego NSDictionary, byłoby przekonwertowanie go na NSData i uzyskanie rozmiaru danych. Powodzenia!

+0

Konwertując do NSData możemy obliczyć poprawny rozmiar obiektu NSDictionary w bajtach? Czy też daje przekonwertowany rozmiar obiektu NSData, który nie jest taki sam dla rozmiaru obiektu NSDictionary? – Shamsiddin

2

może być przydatna do konwersji NSData jeśli słownik zawiera standardowe zajęcia (np NSString.) I nie custome te:

NSDictionary *yourdictionary = ...; 
NSData * data = [NSPropertyListSerialization dataFromPropertyList:yourdictionary 
    format:NSPropertyListBinaryFormat_v1_0 errorDescription:NULL];  
NSLog(@"size of yourdictionary: %d", [data length]); 
9

można również znaleźć w ten sposób:

NSDictionary *[email protected]{@"a": @"Apple",@"b": @"bApple",@"c": @"cApple",@"d": @"dApple",@"e": @"eApple", @"f": @"bApple",@"g": @"cApple",@"h": @"dApple",@"i": @"eApple"}; 

NSMutableData *data = [[NSMutableData alloc] init]; 
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; 
[archiver encodeObject:dict forKey:@"dictKey"]; 
[archiver finishEncoding]; 

NSInteger bytes=[data length]; 
float kbytes=bytes/1024.0; 
NSLog(@"%f Kbytes",kbytes); 
Powiązane problemy