How to calculate total size of NSDictionary object?

后端 未结 4 732
野的像风
野的像风 2021-02-09 06:09

How to calculate total size of NSDictionary object? i have 3000 StudentClass objects in NSDictionary with different keys. And i want to calculate total

相关标签:
4条回答
  • 2021-02-09 06:34

    You could try to get all the keys of the Dictionary in an array and then iterate the array to find the size, it might give you the total size of the keys inside the dictionary.

    NSArray *keysArray = [yourDictionary allValues];
    id obj = nil;
    int totalSize = 0;
    
    for(obj in keysArray)
    {
        totalSize += malloc_size(obj);
    }
    
    0 讨论(0)
  • 2021-02-09 06:36

    The best way to calculate the size of big NSDictionary, I think, would be converting it to NSData and get the size of the data. Good Luck!

    0 讨论(0)
  • 2021-02-09 06:46

    Might be useful to convert to NSData if your dictionary contains standard classes (eg. NSString) and not custome ones:

    NSDictionary *yourdictionary = ...;
    NSData * data = [NSPropertyListSerialization dataFromPropertyList:yourdictionary
        format:NSPropertyListBinaryFormat_v1_0 errorDescription:NULL];    
    NSLog(@"size of yourdictionary: %d", [data length]);
    
    0 讨论(0)
  • 2021-02-09 06:54

    You can also find this way:

    Objective C

    NSDictionary *dict=@{@"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);
    

    Swift 4

    let dict: [String: String] = [
        "a": "Apple", "b": "bApple", "c": "cApple", "d": "dApple", "e": "eApple", "f": "bApple", "g": "cApple", "h": "dApple", "i": "eApple"
    ]
    
    let data = NSMutableData()
    let archiver = NSKeyedArchiver(forWritingWith: data)
    archiver.encode(dict, forKey: "dictKey")
    archiver.finishEncoding()
    
    let bytes = data.length
    let kbytes = Float(bytes) / 1024.0
    
    print(kbytes)
    
    0 讨论(0)
提交回复
热议问题