Objective c 如何释放要返回的值?

Objective c 如何释放要返回的值?,objective-c,ios,cocoa-touch,memory-management,Objective C,Ios,Cocoa Touch,Memory Management,我知道这是相当基本的东西 我有一个类,它有一个返回月份名称的函数;我不确定如何释放我想要返回以防止泄漏的值 在类中声明此值: static NSDateFormatter *formatter = nil; if (formatter == nil) { formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"MMMM yyyy"]; } 事情发生了,然后: if([exampleDate i

我知道这是相当基本的东西

我有一个类,它有一个返回月份名称的函数;我不确定如何释放我想要返回以防止泄漏的值

在类中声明此值:

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,但我没有正确地使用它,因为我在尝试释放它时遇到了崩溃。我还尝试将返回值赋给字符串,但我也遇到了同样的崩溃问题。很抱歉问了一个如此基本的问题,但我希望知道如何正确地发布它,同时仍然返回值,并理解它是如何工作的

返回部分没有泄漏。因为stringFromDate:不是copy、mutableCopy、retain、alloc或new,所以它返回的已经是自动删除的对象

取消分配类时,NSDateFormatter将泄漏。如果你不想让它泄漏,你应该为它创建一个@property并在dealloc中释放它。 局部静态对象总是会泄漏。 我不会在Singleton之外使用这样的对象。每次创建一个类时,都会泄漏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];
}

这绝对是自动释放的目的。当自动释放崩溃时,您是如何使用它的?您没有切换到ARC的具体原因是什么?那么这个问题就无关紧要了:例如approve formatter=[[[NSDateFormatter alloc]init]autorelease]@dasblinkenlight因为有很多类不能很好地转换为ARC——我还没有准备好。不过,下次我开始一个新项目时……你是在问什么时候释放格式化程序还是函数的返回值?但是格式化程序什么时候消失/释放?我的理解有缺陷,这是可以理解的,如果你允许,你需要释放它。如果你想释放它,不要为它创建一个静态变量。为它创建一个@property并在dealloc中释放它。好的,这很有意义。这个类还没有dealloc函数,因为我还不需要。我将添加@property和dealloc tmrw,并让您知道我的进展。