2013-03-18 8 views
5

Come calcolare la dimensione totale dell'oggetto NSDictionary? Ho 3000 oggetti StudentClass in NSDictionary con chiavi diverse. E voglio calcolare la dimensione totale del dizionario in KB. Ho usato malloc_size() ma restituisce sempre 24 (NSDictionary contiene 1 oggetto o 3000 oggetto) sizeof() restituisce sempre uguale.Come calcolare la dimensione totale dell'oggetto NSDictionary?

+1

Ecco la domanda simulata: http://stackoverflow.com/questions/8223560/how-to-find-the-size-of-any-object-in-ios – Ossir

risposta

4

Si potrebbe provare a ottenere tutte le chiavi del dizionario in una matrice e quindi iterare la matrice per trovare la dimensione, potrebbe darvi la dimensione totale delle chiavi all'interno del dizionario.

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

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

Il modo migliore per calcolare la dimensione del grande NSDictionary, penso, sarebbe la conversione in NSData e ottenere la dimensione dei dati. In bocca al lupo!

+0

Convertendo in NSData possiamo calcolare la dimensione corretta dell'oggetto NSDictionary in byte? Oppure fornisce la dimensione dell'oggetto NSData convertito, che non è la stessa cosa con la dimensione dell'oggetto NSDictionary? – Shamsiddin

2

potrebbe essere utile per convertire al NSData se il dizionario contiene classi standard (ad esempio NSString.) E non quelli custome:

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

si possono anche trovare in questo modo:

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