在我写的应用程序中,
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];
}
答案 0 :(得分:4)
使用“Zombies”乐器配置您的应用。当它崩溃时,您应该能够看到流氓对象的完整保留/释放历史记录,并从中找出出错的地方。