2013-03-18 7 views
5

Wie wird die Gesamtgröße von NSDictionary Objekt berechnet? Ich habe 3000 StudentClass Objekte in NSDictionary mit verschiedenen Schlüsseln. Und ich möchte Gesamtgröße des Wörterbuchs in KB berechnen. Ich benutzte malloc_size(), aber es immer zurück 24 (NSDictionary enthalten entweder 1 Objekt oder 3000 Objekt) sizeof() gibt auch immer die gleichen zurück.Wie wird die Gesamtgröße des NSDictionary-Objekts berechnet?

+1

Hier ist eine ähnliche Frage: http://stackoverflow.com/questions/8223560/how-to-find-the-size-of-any-object-in-ios – Ossir

Antwort

4

Sie könnten versuchen, alle Schlüssel des Dictionarys in einem Array abzurufen und anschließend das Array zu durchlaufen, um die Größe zu ermitteln. Dadurch erhalten Sie möglicherweise die Gesamtgröße der Schlüssel im Wörterbuch.

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

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

Der beste Weg, um die Größe von großen NSDictionary zu berechnen, würde ich es in NSData konvertieren und die Größe der Daten erhalten. Viel Glück!

+0

Durch die Umwandlung in NSData können wir berechnen die richtige Größe des NSDictionary-Objekts in Bytes? Oder gibt es die konvertierte NSData-Objektgröße, die mit der NSDictionary-Objektgröße nicht übereinstimmt? – Shamsiddin

2

könnte nützlich sein, um NSData zu konvertieren, wenn Ihr Wörterbuch Standardklassen enthält (zB NSString.) Und nicht custome diejenigen:

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

Sie auch auf diese Weise finden:

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); 
Verwandte Themen