пользовательский метод установки для общего nsdateformatter - PullRequest
0 голосов
/ 24 марта 2012

Я пытаюсь создать пользовательский метод установки для nsdateformatter.Я не уверен, является ли это утечкой и оптимизировано.правильно ли выполнено управление памятьюЯ вижу здесь утечку.Я не знаю почему.,.

    @property (nonatomic, retain) NSDateFormatter   *customDateFormatter;
    ...
    @synthesize customDateFormatter; 
    ..
    - (NSDateFormatter *)customDateFormatter
    {
        if (customDateFormatter == nil)
        {
            [self setCustomDateFormatter:[[NSDateFormatter alloc] init]];//it leaks here :(
            [self.customDateFormatter setLocale: self.locale];
            [self.customDateFormatter setDateFormat:@"h:mm:ss"];
        }
        return self.customDateFormatter;
    }
-(void) dealloc
{
     [customerDateFormatter release];    
     self.customDateFormatter = nil;
     [super dealloc];    
}

Ответы [ 2 ]

1 голос
/ 24 марта 2012

Распространенная ошибка: вы используете установщик для сохраняемого свойства (т. Е. "@Property (retain)"), но вы сохраняете его самостоятельно. Таким образом, он сохраняется дважды.

Просто автоматически высвободите свой пользовательский форматер перед установкой свойства или не используйте его (т. Е. Используйте вспомогательный ivar напрямую).

0 голосов
/ 24 марта 2012

Есть дополнительный резерв. Так как ваш сеттер сохраняет, а alloc - это +1. Вот лекарство:

  NSDateFormatter *df = [[NSDateFormatter alloc] init]];  // 0+1=1
  [self setCustomDateFormatter:df];                       // 1+1=2
  [df release];                                           // 2-1=1
  // then in your dealloc 1-1=0
...