We keep getting a random, weird crash with NSDateFormatter
. The relevant stack trace is:
Program received signal: “EXC_BAD_ACCESS”.
#0 0x00000
EXCBADACCESS will occur when you use any deallocated object... Try to use NSZombie.. It is a easy way to find where the EXCBADACCESS occurs... It will specify which Method where and which object gets deallocated
See this Link http://www.markj.net/iphone-memory-debug-nszombie/
Thanks to the previous answerers.
This was not a memory problem. It turned out to be a synchronization issue. NSDateFormatter
s are not thread safe; there was a background thread attempting to use the same formatter at the same time (hence the randomness).
Hope this helps someone in the future!
My bet is that the string you pass in to the date formatter is over-released.
I was experiencing weird crashes with _sigtramp which caused to application to appear locked up but still on the screen - completely obstructing the real root cause.
It turned out indeed that we introduced multi-thread data parsing which collided with the main GUI thread trying to parse dates using NSDateFormatter.
Putting some synchronization around the NSDateFormatter formatDate calls resolved the issues.
Another solution would be to serialize the execution of the code that uses NSDateFormatter
s, or any other non-thread-safe objects. Using Grand Central Dispatch you can push the code on the main_queue:
dispatch_async(dispatch_get_main_queue(), ^(void){
[some_object some_message];
});
or use a private queue to achieve the same effect:
dispatch_queue_t dispatch_queue = dispatch_queue_create("com.MyApp.serializer",NULL);
dispatch_async(dispatch_queue, ^(void){
[some_object some_message];
});