У меня есть приложение, которое работает в течение нескольких дней и недель на сервере Snow Leopard.Он использует -[NSRunLoop runUntilDate:]
для «паузы» на десять секунд, выполнения своей задачи, а затем снова делает паузу.После более чем одного часа работы мое приложение аварийно завершает работу со следующим отчетом:
Отчет о сбое
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000013
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Application Specific Information:
objc_msgSend() selector name: release
Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 libobjc.A.dylib 0x00007fff84cfef0c objc_msgSend + 40
1 com.apple.CoreFoundation 0x00007fff84e363d1 __CFRunLoopDoSources0 + 1361
2 com.apple.CoreFoundation 0x00007fff84e345c9 __CFRunLoopRun + 873
3 com.apple.CoreFoundation 0x00007fff84e33d8f CFRunLoopRunSpecific + 575
4 com.apple.Foundation 0x00007fff83e73b74 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 270
5 com.apple.Foundation 0x00007fff83ebf19a -[NSRunLoop(NSRunLoop) runUntilDate:] + 78
На первый взгляд я подумал, что мой NSRunLoop
объект недольше действителен, и поэтому сообщение release
в глубине CF вызывает сбой.Однако, я не думаю, что это так, поскольку я получаю ссылку на объект currentRunLoop
в строке ранее.
Время сбоя варьируется от 1 до 1,5 часов, но я не могу справиться с этимчто вызывает этоБудем весьма благодарны за любые комментарии, мнения или идеи по отладке, поскольку я не уверен, что делать дальше.
РЕДАКТИРОВАТЬ: решение проблемы - см. Мой ответ ниже