Ios 如何更好地初始化字符串以避免死存储

Ios 如何更好地初始化字符串以避免死存储,ios,xcode,cocoa-touch,nsstring,dead-code,Ios,Xcode,Cocoa Touch,Nsstring,Dead Code,我发现了一些像这样的问题,但我找不到这个问题。我有许多字符串被初始化为 NSString *string = [[NSString alloc] init]; 然后根据if/else块的结果为其指定一个值: if ([anotherThing isEqualToString:@"boogers"]) { string = [NSString stringWithFormat:@"some characters"]; } else { string = [NSString str

我发现了一些像这样的问题,但我找不到这个问题。我有许多字符串被初始化为

NSString *string = [[NSString alloc] init];
然后根据if/else块的结果为其指定一个值:

if ([anotherThing isEqualToString:@"boogers"]) {
    string = [NSString stringWithFormat:@"some characters"];
} else {
    string = [NSString stringWithFormat:@"some _other_ characters"];
}
然后
字符串
将稍后在方法中使用


在alloc/init阶段,我如何在不留下死区的情况下实现这一点?如果我在If(或else)中alloc,字符串在我需要它的时候已经消失了几行。

您不必在第一行初始化字符串,只需声明它:

NSString *string = nil;
if ([anotherThing isEqualToString:@"boogers"]) {
    string = @"some characters";
} else {
    string = @"some _other_ characters";
}

您不必在第一行初始化字符串,只需声明它:

NSString *string = nil;
if ([anotherThing isEqualToString:@"boogers"]) {
    string = @"some characters";
} else {
    string = @"some _other_ characters";
}

[NSString stringWithFormat:]将为您初始化一个新的NSString对象,基本上您每次都要声明一个新对象,只需将字符串的指针设置为NSString*someString、*someOtherString、*所有您需要的字符串;然后使用任何类方法初始化它,甚至@“字符”;当编译器在运行时为您执行此操作时,它将正常工作。

[NSString stringWithFormat:]将为您初始化一个新的NSString对象,基本上您每次都要声明一个新对象,只需将字符串的指针设置为NSString*someString、*someOtherString、*所有您需要的字符串;然后使用任何类方法初始化它,甚至@“字符”;当编译器在运行时为您执行此操作时,它将正常工作。

首先为什么要分配和初始化“死”字符串?为什么不将其设置为
nil
,因为您的执行路径保证它将被分配?除了Joe Hankin的答案之外,如果您的字符串不需要格式化,您可以使用
string=@“一些字符”。谢谢,@vcsjones。我不知道你能做到@msoler,关于
stringWithFormat:
stringWithString:
之间的真正区别,有什么好的解释吗?我不确定格式化字符串与其他字符串有何不同。
stringWithFormat:
用于创建包含变量内容的字符串,例如
[NSString stringWithFormat:@“在%@中有%d个状态”,一个字符串,另一个字符串]
stringWithString:
只是一个复制构造函数。@JoeHankin,谢谢。这很有道理。为什么你首先要分配和初始化“死”字符串?为什么不将其设置为
nil
,因为您的执行路径保证它将被分配?除了Joe Hankin的答案之外,如果您的字符串不需要格式化,您可以使用
string=@“一些字符”。谢谢,@vcsjones。我不知道你能做到@msoler,关于
stringWithFormat:
stringWithString:
之间的真正区别,有什么好的解释吗?我不确定格式化字符串与其他字符串有何不同。
stringWithFormat:
用于创建包含变量内容的字符串,例如
[NSString stringWithFormat:@“在%@中有%d个状态”,一个字符串,另一个字符串]
stringWithString:
只是一个复制构造函数。@JoeHankin,谢谢。这很有道理。你为什么要使用stringWithFormat:在你的回答中,当你在评论中正确陈述,当你有一个格式字符串时,应该使用它?公平点——我在复制Erik的原始代码,但我编辑我的帖子是为了反映你的评论。为什么你要使用stringWithFormat:在你的回答中,当你在评论中正确陈述了,当你有一个格式字符串时,应该使用它?公平点——我复制了Erik的原始代码,但我编辑我的帖子是为了反映你的评论。