gpt4 book ai didi

cocoa - 处理临时字符串的更好方法是什么?

转载 作者:行者123 更新时间:2023-12-03 18:04:51 25 4
gpt4 key购买 nike

我遇到了一种情况,我需要暂时使用一些字符串,但我读了很多相互冲突的内容,以至于我对最好的处理方法感到有点困惑。

我需要在 if 结构内部分配一些字符串,但在 if 结构外部使用它们,因此需要在 if 外部创建它们,我想的是:

NSString *arbString = [[NSString alloc] init];

if(whatever)
{
arbString = @"Whatever"
}
else
{
arbString = @"SomethingElse"
}

myLabel.text = arbString;
[arbString release];

我见过人们刚刚使用的例子:

NSString *arbString;

创建字符串变量

Google 的 Objective C 指南表示,最好在创建时自动释放:

“创建新的临时对象时,在创建它们的同一行自动释放它们,而不是稍后在同一方法中单独释放”:

// AVOID (unless you have a compelling performance reason)
MyController* controller = [[MyController alloc] init];
// ... code here that might return ...
[controller release];

// BETTER
MyController* controller = [[[MyController alloc] init] autorelease];

所以我不知道哪一个是最佳实践?

最佳答案

在您发布的示例中,当您在 arbString = @"Whatever" 中分配它时,您实际上丢失了对创建的 NSString 的引用。然后释放字符串常量(顺便说一下,它是不可释放的)。

因此存在内存泄漏,因为您从未释放您创建的 NSString。

请记住,所有这些类型都是指针,因此 = 仅重新分配它们。

对于这个问题,在这个例子中,你不需要[[NSString alloc] init]。无论如何,您不需要将字符串复制到局部变量中,只需将 myLabel.text 设置为字符串常量 @"Whatever" 即可。

(编辑:这并不是说您不能使用指针 arbStringarbString = @"Whatever"; myLabel.text = arbString 没问题。但是这只是指针赋值,而不是复制)

如果您需要在返回字符串之前对其进行操作,您将创建一个 NSMutableString,并释放或自动释放它。就个人而言,使用类方法创建自动释放的对象,因此在本例中,我将使用 [NSString string][NSString stringWithString:],它们返回自动释放的对象。

关于cocoa - 处理临时字符串的更好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3178725/

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