如何释放我想要返回的值?

时间:2012-03-24 10:44:23

标签: objective-c ios cocoa-touch memory-management

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

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

在类中声明了这个值:

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,但我使用的不正确,因为当我尝试释放它时,我遇到了崩溃。我也尝试将返回值赋给字符串,但我遇到了同样的崩溃问题。很抱歉提出一个非常重要的问题,但我很高兴知道如何正确地发布这个问题,同时仍然返回价值 - 并了解它的工作原理。

1 个答案:

答案 0 :(得分:0)

返回部分没有泄漏。由于stringFromDate:不是copymutableCopyretainallocnew,因此它已经返回了一个自动释放的对象。

当您的班级被取消分配时,您的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];
}