Total Size of NSMutableArray object

后端 未结 5 1756
盖世英雄少女心
盖世英雄少女心 2021-02-06 21:55

I\'ve got an NSMutableArray that holds a bunch of objects, what I\'m trying to figure out is how much memory is the array using. After looking at a cou

相关标签:
5条回答
  • 2021-02-06 22:15

    To get the number of objects in the array, use

    [temp count]
    

    If you want the total memory usage of the array, you'll have to loop through and add up how much memory each object uses, but I don't think that a generic object will give you its size. In general, you shouldn't really have to worry about memory usage, though.

    0 讨论(0)
  • 2021-02-06 22:19
    size_t size = class_getInstanceSize([temp Class]);
    for (id obj in temp) {
        size += class_getInstanceSize([obj Class]);
    }
    

    Note that class_getInstanceSize is declared in /usr/include/objc/runtime.h

    Also note that this will only count the memory size of the ivars declared in each class.

    0 讨论(0)
  • 2021-02-06 22:19

    Well, you could do something like:

    size_t total;
    id obj;
    for (obj in temp)
      {
      total += class_getInstanceSize([obj class]);
      }
    

    but that doesn't tell you exactly how much storage the array is actually using, since it can grow dynamically and might have more memory at any given time than it needs for just the objects it's pointing to, and of course you'd have to deal with any collections recursively.

    If you're trying to get an idea of how much memory you're using, I suggest digging into the tutorials for Instruments, and getting your head around the memory usage probes it provids.

    0 讨论(0)
  • 2021-02-06 22:20

    There is no direct way to do this since all objects are just stored by reference. There is no concrete notion of "size" in cocoa, especially since objects can have multiple owners which might lead to double counting or other problems.

    0 讨论(0)
  • 2021-02-06 22:41

    If the NSArray, and all the objects it contains, and all their sub-objects (recursively etc.) respond to NSCoder, you might be able to serialize the array into a temporary NSData memory chunk, and then get the memory size of that one flat temporary object.

    0 讨论(0)
提交回复
热议问题