I have a few questions concerning my memory usage. I'm using instruments to keep track of what is going on, but I am a little lost with everything. I have taken a few screenshots.
This is what my overall memory allocations looks like. In the app, I am simply pushing and popping out of a VC, but it seems with each pop I gain 3-5MB of memory. Definitely a problem, right? By around the 5 minute mark I am using about 30MB memory.
This is a snap of the statistics. Any giveaways for memory leaks? my imageIO_PNG_Data? Does this look like a car crash?
And last, a snap of the statistics over 3 generations, the growth seems pretty bad. This is about 15 minutes into using the app. Are there any glaring problems with memory here? I am also getting a memory leak occasionally (that crashes my app) when one of my sockets is fired within my app, but I wasn't able to capture that yet.
Thank you for any help.
EDIT: Okay I have some memory leaks screanshoted too, I'm starting to understand this I think.
Leak upon exiting the VC.
This leak seems to be from the socket/server upon the app and socket starting.
Related
iOS experts, is there anyone who hit a memory leak when using iOS bluetooth low energy framework?
We found that there are so many Notification with 16KiB object posted during Bluetooth communication, but they're not released automatically as we observed.
We'd like to release those objects, otherwise it will hit OutOfMemory when we continuously communicate with our device in a short period.
We're appreciated if someone can provide any clue to release those objects or avoid receiving/creating those objects.
See below image about leaks with 16KiB object.
The image (screenshot) you show, shows no memory leaks. It just shows allocations.
Where are the memory leaks you are seeing?
Also, showing some code helps
Update: by "shows no memory leaks" I mean that
Of the two rows in Instruments, you have selected the first/upper one, which shows allocations not leaks, and
The second row, leaks, has only green checkmarks, indicating there are no leaks.
Profiling your app with Instruments is not easy. Go find some good videos and learn how it works - just like we all did 😝
I am developing a custom keyboard in which I'm ridiculously facing the memory issue. I did all kind of instrumental observation and came to the conclusion that iOS is preserving the memory every time keyboard is appearing and invalidating. I'm very much frustrated of this behaviour because as in dealloc I'm already releasing all of my DMA though my project is in ARC.
Scenario is something like this:
When I starts my keyboard for the first time it consumes approximately and after some operation it use to increase upto 30 MB and then I invalidate the keyboard. Again when I'm reloading it at that moment it starts from 30 MB which is totally unexpected and due to which after some transitions there is memory pressure and extension gets crashed.
It will be very much helpful if anyone can suggest some idea to manage memory pressure.
Short answer here is that you have a memory leak.
If you are writing you extension in Swift, add a break point to the deinit method in view controller that inherits from UIInputViewController and see if it gets called.
If you are writing your app in Objective-C then you can do the same thing from the deconstructor.
I too struggled with this and from my experience, the only thing that will stick around after closing the keyboard is some Core Data stuff. Other then that, if all your objects are owned by the primary view controller (UIInputViewController) then they will go away if they are no longer referenced.
If you still see a large amount of memory being used after the deinit is called then you have a leak elsewhere. Watch out for retain-release cycles and be careful with closures in Swift. Those are usually the culprits when it comes to memory leaks.
Without seeing any of your code I can't really provide any more specific information here.
Good luck!
I am writing an iPad app which uses an AVPlayer to display a video. There's buttons to jump to various parts of the video, and when the user rotates the device, I change the size of the view which holds the AVPlayer layer.
My problem is that after a certain amount of device orientation changes and jumps around the video, the app crashes.
I have NSZombie enabled - this doesn't break.
I have a breakpoint enabled in my code to catch exceptions - this doesn't break.
I have run instruments and the code isn't leaking.
Allocations simply shows the "Overall Bytes" growing and growing with every action until it hits 14 meg and the pad crashes.
I feel like I have no way of getting to the bottom of this. Am I missing some trick to solving this? Does AVPlayer need some special treatment when being released?
ANY HELP, MUCH APPRECIATED.
Use instruments to check your Allocations. I recently had a very similar problem where there were no memory leaks but my Overall Bytes kept growing every time I launched a particular ViewController (and it would eventually crash).
It turned out that the ViewController itself was a strong reference as a delegate to another class (oops) and each time I dismissed the ViewController that other class still had a reference to it. Therefore each time I launched and dismissed this ViewController I would create another instance of it that would never die (and never leak).
Your exact problem may be different but you should be able to see the reason for your Overall Bytes growing by checking out your Allocations.
Regarding this question I had research lot and got the different suggestion, but non of these 100% works, I have 15 view Controllers and I am releasing all unnecessary objects, variables and dealloc images Data and everything that is unnecessary. My app is not going to crash but got the Received memory warning. Level=1 warning and screens suddenly goes black.
More over I got the below warning after surfing the app for 10-15 minutes if no application is running in back ground. IF More applications are running in background in ipad than i got the error in just 5 mins of surfing the app.
I had tried the below suggestion From others Answers for this type of questions
dealloc and release the objects in - (void)didReceiveMemoryWarning Function
Change the resolution of MKMapView
Please any one have other solution for this issue than please tell.
Thanx in Advance..!!
You can try to use memory profiler (allocations instrument) in order to see which parts of your code allocates how much memory. Even more with the profiler you can see the exact point where your app gets that memory warning.
In IOS SDK 6, you need to clear all IBOutlets in Received memory warning function. its due to app using more memory or memory leak.
thanks
I'm looking for help with a very specific memory-management issue where didReceiveMemoryWarning doesn't appear to be getting called in cases where it should be.
I have a straightforward app that's a story with pages. I have an outer view/controller that manages the page views/controller. Each page view has a picture on it of decent size (200-300k). It's large because it's a universal app, so they're all 1024x768, then get scaled down for the iPhone. I have implemented didReceiveMemoryWarning to release unused controllers (whatever's not showing at the time). The app works fine when didReceiveMemoryWarning gets called, but it does not always get called. On the iPod Touch 2G, if I'm going from page to page fast, it will often just kill the program without calling didReceiveMemoryWarning (I put a breakpoint there to see). On an iPhone 1G which has the same amount of RAM, didReceiveMemoryWarning gets called at reasonable times and I never run out of memory.
The log prints "Received memory warning level 1/2" as expected right before my code does get called, but I don't see it in the logs in the iPod Touch 2G when my app gets killed without a chance to free up memory.
I've used static analysis and the leaks tool and the memory profile looks good. I don't think leaks have anything to do with the problem. Rather, the problem is that my program doesn't get the opportunity to free up resources when memory is tight. I do want to keep unseen pages in memory when there's enough memory - it allows for quick paging and makes the pan gesture for changing pages work responsively.
Has anyone else seen this? If anyone has hints, I'd appreciate it. I'm also curious if anyone knows under what conditions didReceiveMemoryWarning should get called. Is it possible that my program is gobbling up so much memory so fast that iOS doesn't have an opportunity to free up memory?
Memory warnings appear to come too late when allocating a lot of memory "too" quickly, especially if the app doesn't spend enough idle time in the run loop between allocations.
Try preflighting (attempt to allocate and then release) memory, and return to the run loop, maybe a half second before you really need the memory.