This is more of a question and an answer. I had noticed in iOS 9 I had no memory issues using the CGPDF Library, and flipped through x amount of pages with no issues. See the attached screenshot, notice each page swipe the memory went down:
However in iOS 10, the exact same PDF and code had a crashing issue when you swipe a certain amount of pages. The app would crash from memory allocations. See attached screenshot, continuous rise in memory:
I'm posting this as a question of if anyone else has encountered this issue with iOS 10, how I fixed the issue was to CGPDFDocumentRelease in the didReceiveMemory warning and then immediately reload my CGPDFDocument, which let the app continue without crashing on iOS 10. After adding the release in the didReceiveMemory, my instruments looks like this, I have not tested on iOS 11 beta yet:
The fix was to add CGPDFDocumentRelease in the didReceiveMemory warning and then immediately reload my CGPDFDocument
Related
I've encountered a huge problem, some of my users have a strange crash. At the launch of my application, before or just after the launch screen, they get a black screen with a spinning wheel. After that the device is locked, and the app closed.
Nothing have change except Xcode 8.3 and iOS 10.3.
On my phone everything works fine, and on simulator as well. I can't reproduce it, and I've no crash on fabrics.
If someone have an idea about it please answer. Thanks in advance.
These might be OOM (out of memory issues). There is no way to determine what caused OOM as far as I know.
Try focusing on whether you have such issues on launch:
Database operations (bringing lots of objects in memory)
Raw image operations
Any infinite loops or operations that happen repeatedly.
Any image size is big or if we use any animated huge size image, application will get into out of memory.
I faced same issue in my application. Just removed the image or resize the image application will work normally.
Since updating to XCode 7.1, I am experiencing issues with using UICollectionView with simulator. Simulator always stops working (rainbow wheel appears) after few scrolling events on any UICollectionView.
This problem appears only in simulator, app works perfectly fine on device. This issue was not there with the previous XCode version. Also, updating to 7.1.1 did not help.
Is anyone else experiencing this issue?
I think this problem is due to memory , increase the system RAM because xcode 7.1 is heavy then earlier one .
The issue is discussed in more detail in Apple's forums at https://forums.developer.apple.com/thread/24274
The issue is that there's a delay in transferring some accessibility information between the sim runtime and host which some users are hitting. Try disabling Flexiglass, Better Touch Tool, Accessibility Inspector, or any other utilities which may be requiring that data.
We have a ionic cordova app built for ios and the application is some what big. And the app is working fine but sometimes in iPad 4 or other devices the application crashes saying memory warning in xcode. And we are using a timeline view similar to facebook app's newsfeed. And it contains images in each item. And this is a infinite scroll list and the list can grow very big. Currently we are using ng-repeat to populate list but we tried migrating it to collection-repeat, and the crash frequency is decreased but its still crashing. If i could find any blogs or links which will guide me through the performance tuning tips in ionic application it would be helpful.
I simply rebooted the simulator by going to Hardware > Reboot. That fixed my app-crashing issue. Good luck with your app!
I'm using heap stack analysis techniques, as described widely on SO here
Everything makes sense, except for I'm trying to track down some UIViewController (subclasses) and they never show up in the allocations list (via parsing it or via search). Since most things in the app's lifecycle are going through VCs, and I can track down other objects allocated in them, I assume there's something I'm missing (...perhaps those are grouped under the much more broad malloc calls?)
I'm trying to track down an over-retained VC, so if anyone can provide useful insight, it'd be appreciated. Thanks!
I spent ages on this yesterday using the simulator, with iOS 8 and Xcode 6.3, with no joy. I think it's not symbolicating properly, hence all the mallocs. I think it's an Xcode bug, as it can't even attach to an iOS 7.1 simulator at all. It was working correctly with an iOS 8 device (8.3). Have you tried on a device yourself?
Have filed radar http://openradar.appspot.com/radar?id=4937802231840768
I have an existing app that I made some recent changes to and I have been testing those changes. The app works perfectly fine on every iPad I test it on (iOS 4 and iOS 5). After loading several (50+) image-heavy views in my app I get a low memory warning and my viewDidUnload methods get called and they properly nil out all of their controls and my in-memory image cache clears itself out and the app continues just fine.
However, on an iPhone 4 and iPhone4s (iOS 5.0.1 and iOS 5.1) I run into a problem where my application runs out of memory without ever receiving a low memory warning. After loading several different views, eventually a new view will come up and be mostly blank and on the console I see memory allocation messages and the whole phone becomes un-responsive and sometimes kills my app.
The particular view that this happens on is different every time, so it's not related to any one view, just the accumulation of memory over time. I have also confirmed that I don't have any memory leaks either.
This existing question is similar:
IOS app killed for Low Memory but no Memory Warning received
and that answer suggests that this could happen if I'm stuck in a loop, but I'm pretty sure that my code isn't stuck in any loops. I'm just clicking through from one view to another in a UINavigationController and several images load in each view. Also, the other question was specifically happening on an iPad where I'm not seeing this issue on an iPad, only iPhones.
BTW, I've tried registering for the low memory notification through NotificationCenter and have an applicationDidReceiveMemoryWarning method in my app delegate and have breakpoints at both and neither get called. Also, no low memory message shows up in the debugger console either.
Any ideas on what might be happening?
Added on 3/26/2012:
Interestingly enough, when I tested my app on the new iPad, it has this same problem that I'm seeing on the iPhone 4 and 4s where the low memory notification is not being received. So I'm wondering if I'm seeing the same problem as this other thread:
The New iPad: Low Memory Warnings Not Appearing?
but that the developer on that thread is testing an iPad-only app and therefore not testing and finding this same problem on any iPhones.
I have done some extensive testing and have a list of devices where I properly received the low memory warning and devices where I don't ever receive it. So far I only see the problem on iOS5 or greater, however on iPad1s with iOS 5.0 and 5.1 I don't see the issue, so it's not just a problem on all devices on iOS 5.
Here is that list:
Proper Low Memory Warning
iPad1 4.2.1
iPad1 5.0
iPad1 5.1
iPad2 4.3.3
iPhone3G 4.2.1
iPod 3G 4.3.3
iPhone4 4.3.3
No Low Memory Warning
iPhone4 5.1
iPhone4s 5.0.1
iPad3 5.1
I've been banging my head on similar problems for the past week. I'm doing something different but with images so somewhat related.
You don't say where all those images are located - hopefully you write them to the file system, then load them into views using [UIImage imageWithContentsOfFile] (or if using CGImageRefs, then use a CGImageSourceCreateWithURL). What you want to avoid is having the images in memory (no swapping in iOS!).
in my case I had some mmap memory to hold the images, I had even unmapped the memory (which syncs it to the file system), but since syncing takes so long, I was being "charged" for that unsynced memory. What I did was essentially call fcntl(fd, F_FULLSYNC) on each of these files to force the system to flush each block before I continued.
I'm working on an app with tons of big images, on an iPad 3.
If I set iOS 5.0 as the Deployment Target, applicationDidReceiveMemoryWarning does not get called if the app consumes too much memory, and the app crashes.
However, applicationDidReceiveMemoryWarning does get called if I set iOS 5.1 as the Deployment Target. The OS thus flushes the cache containing the images that were previously loaded and the app doesn't crash.
The main problem is that I use UIImage imageNamed: to load my images, if your images are big use UIImage imageWithContentsOfFile instead so that they don't get cached (which is an issue if the size of the #2x is very big).
Note that if I display many images very quickly, applicationDidReceiveMemoryWarning doesn't get called in time in iOS 5.1, and I crash!
Can you try running in Instruments for the "Time Profiler" tool? It'll tell you if you're CPU bound in a different thread (though unless you create them yourself I'll be surprised if that's the case). Also good to run the "Allocations" instrument if that doesn't reveal smoking guns.
I have found exactly the behaviour on an iPad 3 running iOS 5.1. applicationDidReceiveMemoryWarning does not get called, nor NSNotifications for UIApplicationDidReceiveMemoryWarningNotification. I also tested the exact same code on some other devices, so you can add these to your list:
Proper low memory warning
iPad 2 5.0.1
iPad 2 4.3.5
iPhone 3GS 5.0.1
No low memory warning
iPad 3 5.1
The pattern could be: iOS devices with 512 MB or 1 GB memory running 5.0.1 - 5.1.
I'm not doing any heavy UIImage handling in this app. It seems that the behaviour from the OS has changed - either it is deliberately killing apps more aggressively (e.g. trying to be smarter about killing apps that look as though they have too onerous memory usage), or the low memory notifications are just broken.