我知道这是相当基本的东西。
我有一个带有函数的类,它返回月份的名称;我不确定如何释放我想要返回的值以防止泄漏。
在类中声明了这个值:
static NSDateFormatter *formatter = nil;
if (formatter == nil) {
formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMMM yyyy"];
}
事情发生了,然后:
if([exampleDate isEqualToDate:
[[self creationDate] laterDate:exampleDate]])
{ //earlierDate returns the earlier date
return(@"Examples");
}else{
return([formatter stringFromDate:[self creationDate]]);
}
我尝试过使用autorelease,但我使用的不正确,因为当我尝试释放它时,我遇到了崩溃。我也尝试将返回值赋给字符串,但我遇到了同样的崩溃问题。很抱歉提出一个非常重要的问题,但我很高兴知道如何正确地发布这个问题,同时仍然返回价值 - 并了解它的工作原理。
答案 0 :(得分:0)
返回部分没有泄漏。由于stringFromDate:
不是copy
,mutableCopy
,retain
,alloc
或new
,因此它已经返回了一个自动释放的对象。
当您的班级被取消分配时,您的NSDateFormatter
会泄漏。如果您不希望它泄漏,您应该为它创建一个@property
并在dealloc中释放它
本地静态对象将始终泄漏
我不会在单身人士之外使用这些物品。每次创建一个类时,都会泄漏NSDateFormatter。几乎在所有情况下,使用@property
都会更好。
我见过这样的黑客,但在我看来,他们解决了你不应该首先遇到的问题:
- (NSString *)someDateFromString:(NSString *)str {
static NSDateFormatter *formatter = nil;
if (formatter == nil) {
formatter = [[NSDateFormatter alloc] init];
}
if (str == nil) {
[formatter release];
formatter = nil;
return nil;
}
// do something
return date;
}
- (void)dealloc {
[self someDateFromString:nil]; // will release the static date formatter.
[super dealloc];
}