Серьезная утечка в моем скрипте NSDateFormatter

#iphone #memory #memory-leaks #instruments

#iPhone #память #утечки памяти #инструменты

Вопрос:

Я использовал инструмент, чтобы проверить, были ли у меня какие-либо утечки в моем скрипте, и он пришел с парой, особенно в моем NSDateFormatter. Он говорит, что у меня это было:

 Leaked Object    #   Address         Size       Responsible Library   Responsible Frame
NSDateFormatter  70  < multiple >   1.09 KB    DAF                    [XMLParser dateFromString:]
  

Это мой метод, на который он указывает, и я не могу найти никакой утечки:

   (NSDate *)dateFromString:(NSString *)dateString
{
    NSDateFormatter *nsDateFormatter = [[NSDateFormatter alloc] init];
    [nsDateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm"];
    NSDate *date = [nsDateFormatter dateFromString:dateString];
    return date;
    [nsDateFormatter release];
}
  

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

Комментарии:

1. Я удивлен, что компилятор не предупредил о «недоступном операторе» или подобном.

Ответ №1:

Вы возвращаете дату перед выпуском средства форматирования.

   (NSDate *)dateFromString:(NSString *)dateString
{
    NSDateFormatter *nsDateFormatter = [[NSDateFormatter alloc] init];
    [nsDateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm"];
    NSDate *date = [nsDateFormatter dateFromString:dateString];
    [nsDateFormatter release]; //Release here
    return date;
    //Code after a return does not get executed!!!
}
  

Ответ №2:

Сделайте ваше return утверждение последним утверждением. Как вы это написали, [nsDateFormatter release] никогда не вызывается, потому что функция возвращается до того, как сможет выполнить эту строку.