保留[NSDate distantPast]崩溃......有时候

时间:2012-01-30 19:35:55

标签: objective-c ios cocoa-touch

在我写的应用程序中,

        NSDate *test = [NSDate distantPast];
        [test retain]; // crashes with EXC_BAD_ACCESS

几乎每次都会在保留时崩溃,而

        NSDate *test = [NSDate date];
        [test retain];

永远不会。

我很疑惑为什么。通过UI操作在主线程上调用这段代码,我在调试器的IOS模拟器中运行它。有时它不会崩溃。可能是并发问题?是否有一个明显的问题,我错过了,或者我应该尝试削减我的应用程序,直到它工作?

更新

        NSDate *test = [[NSDate distantPast] copy];

也崩溃了,而

        NSDate *test = [[NSDate date] copy];

没有。清理构建并重新启动IOS模拟器也无济于事。

更新2:

application:didFinishLaunchingWithOptions中调用代码段不会崩溃。我的应用程序必须做一些搞砸系统的事情。当我发现什么时,我会发一个答案。

更新3(已解决):

违规行在我的应用程序中完全不同:

WRONG:

- (id)init
{
    lastUpdate = [NSDate distantPast];
}

在执行离开init代码块后,remotePast的实例会自动释放。我应该保留它以反击自动释放。

正确:

- (id)init
{
    lastUpdate = [[NSDate distantPast] retain];
}

1 个答案:

答案 0 :(得分:4)

使用“Zombies”乐器配置您的应用。当它崩溃时,您应该能够看到流氓对象的完整保留/释放历史记录,并从中找出出错的地方。