共享nsdateformatter的自定义setter方法

时间:2012-03-24 00:06:38

标签: iphone objective-c nsdateformatter

我正在尝试为nsdateformatter创建自定义setter方法。我不确定这是否是无泄漏和优化的。是正确完成的内存管理。我在这看到泄漏。我不知道为什么。 。

    @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 个答案:

答案 0 :(得分:1)

常见错误:您正在使用setter作为保留属性(即" @property(保留)"),但您自己保留它。因此它被保留两次。

在设置属性之前,只需自动发布自定义格式化程序,或者不使用setter(即直接使用支持ivar)。

答案 1 :(得分:0)

还有额外的保留。由于你的setter保留,而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
相关问题