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,并让您知道我的进展。