сохранить при сбое [NSDate distantPast] ... иногда - PullRequest
1 голос
/ 30 января 2012

В приложении, которое я пишу,

        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];
}

1 Ответ

4 голосов
/ 31 января 2012

Профилируйте свое приложение с помощью инструмента "Зомби". Когда он падает, вы должны увидеть полную историю сохранения / освобождения мошеннического объекта и выяснить, что пошло не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...