Ievgen Leichenko
Ievgen Leichenko

Reputation: 1317

High memory usage in the app

I have an app that has 12 images contained in an array. All these images are displayed at the same time on the screen. (1 view - 12 much wider and higher images (UIImageView's) one on another. When user does something, app moves the images, thus the view displays different scenes) The images themselves are not too heavy (it is about 2500x5000 in size, but the whole folder with images is around 3.5 MB). After loading, the app consumes 355 MB. When I put breakpoint in viewDidLoad (and all images are loaded at that time), xcode shows that the app consumes only 9 MB, but in viewDidAppear it is 355 MB.

What is the reason of it? And how can I store images compactly? (As I assume that the problem is in the images).

Thank you for any help!

Upvotes: 0

Views: 142

Answers (3)

Andrea
Andrea

Reputation: 26383

An image open will occupy something like : H x W x number of channel x number of bit for channel, the file size is another thing, because images are compressed according to their type. Your images are 50Mb each one in memory.
The only way is to resize the image before displaing them. There are plenty of image resizing categories online, just google a little bit. The other suggestion is to not load all the images togheter, just bring in the array the file path, and instantiate the image lazily.
If you need to use hires images you should look for CATiledLayer and tiling techniques.

Upvotes: 2

user2260054
user2260054

Reputation: 522

In Xcode go to Product->Profile. You will find there a lot of useful instruments which will help you to find problems with memory, CPU or battery usage. However, check it if you haven't seen it before.

Upvotes: 0

aspyct
aspyct

Reputation: 3875

These images probably cannot be displayed all at the same time onscreen, so you may want to load them only when necessary.

If you still need to display them all together onscreen, think about reducing their size.

Still, 355Mb is huge. Are you doing anything else in that application, that might use up all of that memory?

Upvotes: 0

Related Questions