sj wengi
sj wengi

Reputation:

Total Size of NSMutableArray object

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 couple of places I know about the size of call, and when I make it I get 32 bits (which is the size of the NSMutableArray object it self).

Example code:

NSMutableArray *temp = [[NSMutableArray alloc]init];
[temp addObject:objectxyz];
[temp addObject:objectabc];
[temp addObject:object123];

now I want to know the size :)

Upvotes: 40

Views: 74132

Answers (5)

hotpaw2
hotpaw2

Reputation: 70693

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.

Upvotes: 4

Ed Marty
Ed Marty

Reputation: 39690

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.

Upvotes: 8

NSResponder
NSResponder

Reputation: 16861

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.

Upvotes: 2

Sophie Alpert
Sophie Alpert

Reputation: 143134

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.

Upvotes: 105

cobbal
cobbal

Reputation: 70733

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.

Upvotes: 5

Related Questions