gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 17:35:49 25 4
gpt4 key购买 nike

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

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

在类中声明这个值:

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: 不是 copymutableCopyretainallocnew 它已经返回一个自动释放的对象。

您的 NSDateFormatter 会在类被释放时泄漏。如果你不希望它泄漏,你应该为它创建一个 @property 并在 dealloc 中释放它。
本地静态对象总是会泄漏。
我不会在单例之外使用此类对象。每次您创建一个类时,您都会泄漏一个 NSDateFormatter。几乎在所有情况下,使用 @property 都更好。

我见过这样的 hack,但在我看来,它们解决了一个你一开始就不应该遇到的问题:

- (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];
}

关于objective-c - 如何释放我想要返回的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9851068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com