Утечка при уменьшении даты в цикле - PullRequest
2 голосов
/ 08 июля 2011

У меня проблемы с устранением утечки, обнаруженной приборами. Я пытаюсь уменьшить дату в цикле, используя метод dateByAddingComponents:toDate:options:, равный NSCalendar, и у меня постоянно возникают утечки NSDate объектов (49, если быть точным).

Вот как выглядит мой код:

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

Я пытался исправить эту утечку несколькими различными способами, но, поскольку я не понимаю, почему она протекает, я действительно понятия не имею, что я делаю. Есть ли у вас какие-либо подсказки, которые помогут мне решить эту проблему, зная, что я бы предпочел не использовать NSAutoreleasePool?

Ответы [ 3 ]

1 голос
/ 08 июля 2011

Почему вы думаете, что у вас течь?Если это просто инструменты, сообщающие, что теперь у вас есть еще 50 объектов даты, то это правда.Они будут храниться до тех пор, пока вы не установите self.fooArray для чего-то другого, и в этот момент (если вы используете установщик) они будут освобождены.

0 голосов
/ 08 июля 2011
  1. Вы добавляете даты в массив.
  2. Я полагаю, dateByAddingComponents:toDate:options создает новый объект даты и вызывает для него autorelease.Вам нужен NSAutoReleasePool, чтобы избавиться от этих случаев.
0 голосов
/ 08 июля 2011

Я не вижу утечки памяти.Вы получите 50 дат в fooArray, это 50 объектов, сохраненных в массиве.Это не утечка.

...