在循环中递减日期时泄漏

时间:2011-07-08 13:05:42

标签: iphone objective-c memory-leaks nsdate

我在修复仪器检测到的泄漏方面遇到了一些麻烦。我正在尝试使用dateByAddingComponents:toDate:options:的{​​{1}}方法在循环中减少日期,并且我一直在泄漏NSCalendar个对象(确切地说是49个)。

以下是我的代码:

NSDate

我试图通过几种不同的方式解决这个漏洞,但由于我不明白它为什么泄漏,我真的不知道我在做什么。您是否有任何线索可以帮助我解决此问题,因为我知道我不想使用NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; // Get current date NSDate *date = [NSDate date]; // Create an NSDateComponents object that will be used to decrement the date NSDateComponents *decStep = [[NSDateComponents alloc] init]; [decStep setDay:-1]; for (NSUInteger i = 49; i >= 0 ; i--) { // Insert the date object in an array [self.fooArray insertObject:date atIndex:0]; // Decrement the date date = [gregorian dateByAddingComponents:decStep toDate:date options:0]; } // Release calendar and date components objects [decStep release]; [gregorian release];

3 个答案:

答案 0 :(得分:1)

为什么你认为你在泄漏?如果只是仪器报告你现在已经有50个以上的日期对象,那就是这样。它们将被保留,直到你将self.fooArray设置为其他东西,此时(如果你使用setter),它们将被释放。

答案 1 :(得分:0)

我看到没有内存泄漏。您在fooArray中获得50个日期,即阵列保留的50个对象。那不是泄密。

答案 2 :(得分:0)

  1. 您正在将日期添加到数组中。
  2. 我相信dateByAddingComponents:toDate:options会创建一个新的日期对象,并在其上调用autorelease。您需要一个NSAutoReleasePool来摆脱这些实例。