我想在While循环中使用[NSDate date]获取当前日期。我通过这样做来实现这一目标:
while (interval > 0.0) {
NSDate *currentDate = [[NSDate alloc] init];
currentDate = [NSDate date];
interval = (float) [newDate timeIntervalSinceDate: currentDate] / 60;
[currentDate release];
}
我不知道为什么内存泄漏表明存在大量内存泄露。请指导我完成任务的正确方法。
答案 0 :(得分:6)
在第NSDate *currentDate = [[NSDate alloc] init];
行中,您将创建一个新对象,您应该将其释放。在行currentDate = [NSDate date];
中,您不释放旧对象,只创建指向另一个对象的指针。在行[currentDate release];
中,您释放在循环的第二行创建的对象,这可能会导致错误(该对象被标记为autorelease one,iOS将为您清除它)。您应该重写您的代码,如:
while (interval > 0.0) {
NSDate *currentDate = [NSDate date];
interval = (float) [newDate timeIntervalSinceDate: currentDate] / 60;
}
答案 1 :(得分:4)
您不需要第一行NSDate *currentDate = [[NSDate alloc] init];
。您可以直接将 [NSDate date] 分配给 currentDate 。
NSDate *currentDate = nil;
while (interval > 0.0) {
currentDate = [NSDate date];
interval = (float) [newDate timeIntervalSinceDate: currentDate] / 60;
}
答案 2 :(得分:3)
问题不在于你本身是在泄漏,而是在一个while循环中运行。
自动释放日期中自动发布的日期正在增长,因为该池仅在运行循环的空闲时间内清空。
一种解决方案是在while
范围内创建一个本地自动释放池 while (foo) {
NSAutoreleasePool *aPool = [[NSAutoreleasePool alloc ] init];
NSDate *currentDate = [NSDate date];
// other computational foo
[aPool release]
}
当您在本地范围内释放池时,它将立即删除您请求的自动释放日期。