我正在尝试为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];
}
答案 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