В приложении, которое я пишу,
NSDate *test = [NSDate distantPast];
[test retain]; // crashes with EXC_BAD_ACCESS
падает почти каждый раз при сохранении, а
NSDate *test = [NSDate date];
[test retain];
никогда.
Я озадачен, почему,Кусок кода вызывается в основном потоке через действие пользовательского интерфейса, и я запускаю его в симуляторе IOS в отладчике.Иногда это работает без сбоев.Может ли это быть проблемой параллелизма?Есть ли очевидная проблема, которую я пропускаю, или я должен попытаться обрезать свое приложение, пока оно не заработает?
ОБНОВЛЕНИЕ:
NSDate *test = [[NSDate distantPast] copy];
также дает сбой, пока
NSDate *test = [[NSDate date] copy];
нет.Очистка сборки и перезапуск симулятора IOS также не помогли.
ОБНОВЛЕНИЕ 2:
Вызов фрагмента в application:didFinishLaunchingWithOptions
не приводит к сбою.Мое приложение должно делать что-то, что портит систему.Я отправлю ответ, когда узнаю, что.
ОБНОВЛЕНИЕ 3 (решено):
Линия оскорбления была где-то совершенно другой в моем приложении:
WRONG:
- (id)init
{
lastUpdate = [NSDate distantPast];
}
Экземпляр distantPast автоматически освобождается после того, как выполнение покидает блок кода инициализации.Я должен был сохранить его, чтобы противостоять этому авто-релизу.
ПРАВИЛЬНО:
- (id)init
{
lastUpdate = [[NSDate distantPast] retain];
}